package com.osmand.data; import java.util.Collection; import java.util.Map; import java.util.TreeMap; import com.osmand.osm.Entity; import com.osmand.osm.Node; import com.osmand.osm.OSMSettings.OSMTagKey; public class City extends MapObject { public enum CityType { CITY(10000), TOWN(5000), VILLAGE(1000), HAMLET(300), SUBURB(300); private double radius; private CityType(double radius){ this.radius = radius; } public double getRadius() { return radius; } } private final Node el; private CityType type = null; private Map streets = new TreeMap(); public City(Node el){ this.el = el; String place = el.getTag(OSMTagKey.PLACE); for(CityType t : CityType.values()){ if(t.name().equalsIgnoreCase(place)){ type = t; break; } } } public Street registerStreet(String street){ if(!streets.containsKey(street)){ streets.put(street, new Street(street)); } return streets.get(street); } public Street registerBuilding(Entity e){ String number = e.getTag(OSMTagKey.ADDR_HOUSE_NUMBER); String street = e.getTag(OSMTagKey.ADDR_STREET); if( street != null && number != null){ registerStreet(street).registerBuilding(e); return streets.get(street); } return null; } public CityType getType(){ return type; } public Collection getStreets(){ return streets.values(); } @Override public Node getEntity() { return el; } @Override public String toString() { return "City [" +type+"] " + getName(); } public void doDataPreparation(){ for(Street s : getStreets()){ s.doDataPreparation(); } } }