use of net.osmand.data.Street in project OsmAnd-tools by osmandapp.
the class BinaryMerger method mergeCities.
private static City mergeCities(City city, City namesake, Map<City, Map<Street, List<Node>>> namesakesStreetNodes) {
Map<Street, Street> smap = city.mergeWith(namesake);
Map<Street, List<Node>> wayNodes = namesakesStreetNodes.get(city);
Map<Street, List<Node>> owayNodes = namesakesStreetNodes.get(namesake);
for (Street o : smap.keySet()) {
List<Node> nodes = owayNodes.get(o);
wayNodes.put(smap.get(o), nodes);
}
return city;
}
use of net.osmand.data.Street in project OsmAnd-tools by osmandapp.
the class BinaryMerger method preloadStreetsAndBuildings.
private void preloadStreetsAndBuildings(BinaryMapIndexReader rindex, City city, Map<City, Map<Street, List<Node>>> namesakesStreetNodes) throws IOException {
rindex.preloadStreets(city, null);
Map<Street, List<Node>> streetNodes = new LinkedHashMap<Street, List<Node>>();
Map<String, List<Node>> streetNodesN = new LinkedHashMap<String, List<Node>>();
for (Street street : city.getStreets()) {
rindex.preloadBuildings(street, null);
ArrayList<Node> nns = new ArrayList<Node>();
for (Street is : street.getIntersectedStreets()) {
List<Node> list = streetNodesN.get(is.getName());
Node nn = null;
if (list != null) {
boolean nameEqual = false;
double dd = 100000;
for (Node n : list) {
double d = MapUtils.getDistance(n.getLatLon(), is.getLocation());
if (Algorithms.objectEquals(street.getName(), n.getTag("name")) && (d < dd || !nameEqual)) {
nn = n;
dd = d;
nameEqual = true;
} else if (!nameEqual && d < dd) {
nn = n;
dd = d;
}
}
}
if (nn == null) {
int ty = (int) MapUtils.getTileNumberY(24, is.getLocation().getLatitude());
int tx = (int) MapUtils.getTileNumberY(24, is.getLocation().getLongitude());
long id = (((long) tx << 32)) | ty;
nn = new Node(is.getLocation().getLatitude(), is.getLocation().getLongitude(), id);
nn.putTag("name", is.getName());
}
nns.add(nn);
}
streetNodes.put(street, nns);
if (streetNodesN.containsKey(street.getName())) {
streetNodesN.get(street.getName()).addAll(nns);
} else {
streetNodesN.put(street.getName(), nns);
}
}
namesakesStreetNodes.put(city, streetNodes);
}
use of net.osmand.data.Street in project Osmand by osmandapp.
the class RegionAddressRepositoryBinary method getStreetByName.
@Override
public Street getStreetByName(City o, String name) {
name = name.toLowerCase();
preloadStreets(o, null);
Collection<Street> streets = o.getStreets();
String lang = getLang();
boolean transliterateNames = isTransliterateNames();
for (Street s : streets) {
String sName = s.getName(lang, transliterateNames).toLowerCase();
if (collator.equals(sName, name)) {
return s;
}
}
return null;
}
use of net.osmand.data.Street in project Osmand by osmandapp.
the class QuickSearchListItem method getTypeName.
public static String getTypeName(OsmandApplication app, SearchResult searchResult) {
switch(searchResult.objectType) {
case CITY:
City city = (City) searchResult.object;
return getCityTypeStr(app, city.getType());
case POSTCODE:
return app.getString(R.string.postcode);
case VILLAGE:
city = (City) searchResult.object;
if (!Algorithms.isEmpty(searchResult.localeRelatedObjectName)) {
if (searchResult.distRelatedObjectName > 0) {
return getCityTypeStr(app, city.getType()) + " • " + OsmAndFormatter.getFormattedDistance((float) searchResult.distRelatedObjectName, app) + " " + app.getString(R.string.shared_string_from) + " " + searchResult.localeRelatedObjectName;
} else {
return getCityTypeStr(app, city.getType()) + ", " + searchResult.localeRelatedObjectName;
}
} else {
return getCityTypeStr(app, city.getType());
}
case STREET:
StringBuilder streetBuilder = new StringBuilder();
if (searchResult.localeName.endsWith(")")) {
int i = searchResult.localeName.indexOf('(');
if (i > 0) {
streetBuilder.append(searchResult.localeName.substring(i + 1, searchResult.localeName.length() - 1));
}
}
if (!Algorithms.isEmpty(searchResult.localeRelatedObjectName)) {
if (streetBuilder.length() > 0) {
streetBuilder.append(", ");
}
streetBuilder.append(searchResult.localeRelatedObjectName);
}
return streetBuilder.toString();
case HOUSE:
if (searchResult.relatedObject != null) {
Street relatedStreet = (Street) searchResult.relatedObject;
if (relatedStreet.getCity() != null) {
return searchResult.localeRelatedObjectName + ", " + relatedStreet.getCity().getName(searchResult.requiredSearchPhrase.getSettings().getLang(), true);
} else {
return searchResult.localeRelatedObjectName;
}
}
return "";
case STREET_INTERSECTION:
Street street = (Street) searchResult.object;
if (street.getCity() != null) {
return street.getCity().getName(searchResult.requiredSearchPhrase.getSettings().getLang(), true);
}
return "";
case POI_TYPE:
String res = "";
if (searchResult.object instanceof AbstractPoiType) {
AbstractPoiType abstractPoiType = (AbstractPoiType) searchResult.object;
if (abstractPoiType instanceof PoiCategory) {
res = "";
} else if (abstractPoiType instanceof PoiFilter) {
PoiFilter poiFilter = (PoiFilter) abstractPoiType;
res = poiFilter.getPoiCategory() != null ? poiFilter.getPoiCategory().getTranslation() : "";
} else if (abstractPoiType instanceof PoiType) {
PoiType poiType = (PoiType) abstractPoiType;
res = poiType.getParentType() != null ? poiType.getParentType().getTranslation() : null;
if (res == null) {
res = poiType.getCategory() != null ? poiType.getCategory().getTranslation() : null;
}
if (res == null) {
res = "";
}
} else {
res = "";
}
} else if (searchResult.object instanceof CustomSearchPoiFilter) {
res = ((CustomSearchPoiFilter) searchResult.object).getName();
}
return res;
case POI:
Amenity amenity = (Amenity) searchResult.object;
PoiCategory pc = amenity.getType();
PoiType pt = pc.getPoiTypeByKeyName(amenity.getSubType());
String typeStr = amenity.getSubType();
if (pt != null) {
typeStr = pt.getTranslation();
} else if (typeStr != null) {
typeStr = Algorithms.capitalizeFirstLetterAndLowercase(typeStr.replace('_', ' '));
}
return typeStr;
case LOCATION:
LatLon latLon = searchResult.location;
if (latLon != null && searchResult.localeRelatedObjectName == null) {
String locationCountry = app.getRegions().getCountryName(latLon);
searchResult.localeRelatedObjectName = locationCountry == null ? "" : locationCountry;
}
return searchResult.localeRelatedObjectName;
case FAVORITE:
FavouritePoint fav = (FavouritePoint) searchResult.object;
return fav.getCategory().length() == 0 ? app.getString(R.string.shared_string_favorites) : fav.getCategory();
case FAVORITE_GROUP:
return app.getString(R.string.shared_string_my_favorites);
case REGION:
BinaryMapIndexReader binaryMapIndexReader = (BinaryMapIndexReader) searchResult.object;
System.out.println(binaryMapIndexReader.getFile().getAbsolutePath() + " " + binaryMapIndexReader.getCountryName());
break;
case RECENT_OBJ:
HistoryEntry entry = (HistoryEntry) searchResult.object;
boolean hasTypeInDescription = !Algorithms.isEmpty(entry.getName().getTypeName());
if (hasTypeInDescription) {
return entry.getName().getTypeName();
} else {
return "";
}
case WPT:
StringBuilder sb = new StringBuilder();
GPXFile gpx = (GPXFile) searchResult.relatedObject;
if (!Algorithms.isEmpty(searchResult.localeRelatedObjectName)) {
sb.append(searchResult.localeRelatedObjectName);
}
if (gpx != null && !Algorithms.isEmpty(gpx.path)) {
if (sb.length() > 0) {
sb.append(", ");
}
sb.append(new File(gpx.path).getName());
}
return sb.toString();
case UNKNOWN_NAME_FILTER:
break;
}
return searchResult.objectType.name();
}
use of net.osmand.data.Street in project Osmand by osmandapp.
the class BinaryInspector method printAddressDetailedInfo.
private void printAddressDetailedInfo(VerboseInfo verbose, BinaryMapIndexReader index, AddressRegion region) throws IOException {
String[] cityType_String = new String[] { "Cities/Towns section", "Postcodes section", "Villages section" };
for (int j = 0; j < BinaryMapAddressReaderAdapter.CITY_TYPES.length; j++) {
int type = BinaryMapAddressReaderAdapter.CITY_TYPES[j];
final List<City> cities = index.getCities(region, null, type);
print(MessageFormat.format("\t{0}, {1,number,#} group(s)", cityType_String[j], cities.size()));
if (BinaryMapAddressReaderAdapter.CITY_TOWN_TYPE == type) {
if (!verbose.vstreetgroups && !verbose.vcities) {
println("");
continue;
}
} else if (!verbose.vstreetgroups) {
println("");
continue;
}
println(":");
for (City c : cities) {
int size = index.preloadStreets(c, null);
List<Street> streets = new ArrayList<Street>(c.getStreets());
String name = c.getName(verbose.lang);
if (verbose.vcitynames) {
boolean includeEnName = verbose.lang == null || !verbose.lang.equals("en");
name += " " + c.getNamesMap(includeEnName).toString();
}
String cityDescription = (type == BinaryMapAddressReaderAdapter.POSTCODES_TYPE ? MessageFormat.format("\t\t''{0}'' {1,number,#} street(s) size {2,number,#} bytes", name, streets.size(), size) : MessageFormat.format("\t\t''{0}'' [{1,number,#}], {2,number,#} street(s) size {3,number,#} bytes", name, c.getId(), streets.size(), size));
print(cityDescription);
if (!verbose.vstreets) {
println("");
continue;
}
println(":");
if (!verbose.contains(c))
continue;
for (Street t : streets) {
if (!verbose.contains(t))
continue;
index.preloadBuildings(t, null);
final List<Building> buildings = t.getBuildings();
final List<Street> intersections = t.getIntersectedStreets();
println(MessageFormat.format("\t\t\t''{0}'' [{1,number,#}], {2,number,#} building(s), {3,number,#} intersections(s)", new Object[] { t.getName(verbose.lang), t.getId(), buildings.size(), intersections.size() }));
if (buildings != null && !buildings.isEmpty() && verbose.vbuildings) {
println("\t\t\t\tBuildings:");
for (Building b : buildings) {
println(MessageFormat.format("\t\t\t\t{0} [{1,number,#} {2} ]", new Object[] { b.getName(verbose.lang), b.getId(), b.getPostcode() == null ? "" : b.getPostcode() }));
}
}
if (intersections != null && !intersections.isEmpty() && verbose.vintersections) {
print("\t\t\t\tIntersects with:");
for (Street s : intersections) {
println("\t\t\t\t\t" + s.getName(verbose.lang));
}
}
}
}
}
}
Aggregations