Search in sources :

Example 6 with Street

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;
}
Also used : Node(net.osmand.osm.edit.Node) Street(net.osmand.data.Street) List(java.util.List) ArrayList(java.util.ArrayList)

Example 7 with Street

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);
}
Also used : Node(net.osmand.osm.edit.Node) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) Street(net.osmand.data.Street) List(java.util.List) ArrayList(java.util.ArrayList)

Example 8 with Street

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;
}
Also used : Street(net.osmand.data.Street)

Example 9 with Street

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();
}
Also used : Amenity(net.osmand.data.Amenity) PoiFilter(net.osmand.osm.PoiFilter) CustomSearchPoiFilter(net.osmand.search.core.CustomSearchPoiFilter) FavouritePoint(net.osmand.data.FavouritePoint) AbstractPoiType(net.osmand.osm.AbstractPoiType) PoiType(net.osmand.osm.PoiType) BinaryMapIndexReader(net.osmand.binary.BinaryMapIndexReader) City(net.osmand.data.City) AbstractPoiType(net.osmand.osm.AbstractPoiType) FavouritePoint(net.osmand.data.FavouritePoint) LatLon(net.osmand.data.LatLon) PoiCategory(net.osmand.osm.PoiCategory) Street(net.osmand.data.Street) HistoryEntry(net.osmand.plus.helpers.SearchHistoryHelper.HistoryEntry) CustomSearchPoiFilter(net.osmand.search.core.CustomSearchPoiFilter) GPXFile(net.osmand.plus.GPXUtilities.GPXFile) GPXFile(net.osmand.plus.GPXUtilities.GPXFile) File(java.io.File)

Example 10 with Street

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));
                    }
                }
            }
        }
    }
}
Also used : Building(net.osmand.data.Building) TIntArrayList(gnu.trove.list.array.TIntArrayList) ArrayList(java.util.ArrayList) TLongArrayList(gnu.trove.list.array.TLongArrayList) Street(net.osmand.data.Street) MapObject(net.osmand.data.MapObject) City(net.osmand.data.City)

Aggregations

Street (net.osmand.data.Street)29 ArrayList (java.util.ArrayList)16 City (net.osmand.data.City)14 List (java.util.List)11 LatLon (net.osmand.data.LatLon)10 Node (net.osmand.osm.edit.Node)9 Building (net.osmand.data.Building)7 MapObject (net.osmand.data.MapObject)7 LinkedHashMap (java.util.LinkedHashMap)6 TIntArrayList (gnu.trove.list.array.TIntArrayList)5 Amenity (net.osmand.data.Amenity)5 SimpleStreet (net.osmand.data.preparation.address.DBStreetDAO.SimpleStreet)5 TreeMap (java.util.TreeMap)4 ByteString (com.google.protobuf.ByteString)3 TLongObjectHashMap (gnu.trove.map.hash.TLongObjectHashMap)3 HashMap (java.util.HashMap)3 TreeSet (java.util.TreeSet)3 BinaryMapIndexReader (net.osmand.binary.BinaryMapIndexReader)3 BinaryFileReference (net.osmand.data.preparation.BinaryFileReference)3 Message (android.os.Message)2