small bugfix

git-svn-id: https://osmand.googlecode.com/svn/trunk@62 e29c36b1-1cfa-d876-8d93-3434fc2bb7b8
This commit is contained in:
Victor Shcherb 2010-05-17 12:03:16 +00:00
parent 2060618cb8
commit 86395f8bc9
12 changed files with 77 additions and 70 deletions

View file

@ -35,6 +35,9 @@ public class ToDoConstants {
// 9. Log to see when exception occured(android) // 9. Log to see when exception occured(android)
// 10. Specify auto-rotating map (compass). // 10. Specify auto-rotating map (compass).
// 11. Print out additional info speed, altitude, number of satellites // 11. Print out additional info speed, altitude, number of satellites
// 12. Show point where are you going (the arrow not the point)
// 13. Save point as favourite
// 14. Show zoom level directly on map
// ------------------- // -------------------
@ -44,8 +47,10 @@ public class ToDoConstants {
// 2. implement bundle downloading tiles () // 2. implement bundle downloading tiles ()
// 3. download tiles without using dir tiles // 3. download tiles without using dir tiles
// 4. Config file log & see log from file // 4. Config file log & see log from file
// 6. Predefine what should be extracted from osm (building, poi or roads) // 6. Predefine before file loading what should be extracted from osm (building, poi or roads)
// 7. Fix TODO in files (accept amenity - way) // 7. Fix TODO in files (accept amenity - way)
// 8. add progress for data generation process // 9. Normalizing streets
// 10. Reinvent index mechanism (save in zip file with tile indexes, save city/town addresses separately, read partially !)
// 11. Street setName() change in city index!
} }

View file

@ -3,18 +3,11 @@ package com.osmand.data;
import com.osmand.osm.Entity; import com.osmand.osm.Entity;
public class Building extends MapObject<Entity> { public class Building extends MapObject<Entity> {
private Entity e;
public Building(Entity e){ public Building(Entity e){
this.e = e; super(e);
} }
public Building(){} public Building(){}
@Override
public Entity getEntity() {
return e;
}
} }

View file

@ -41,12 +41,11 @@ public class City extends MapObject<Node> {
} }
} }
private Node el;
private CityType type = null; private CityType type = null;
private Map<String, Street> streets = new TreeMap<String, Street>(); private Map<String, Street> streets = new TreeMap<String, Street>();
public City(Node el){ public City(Node el){
this.el = el; super(el);
type = CityType.valueFromString(el.getTag(OSMTagKey.PLACE)); type = CityType.valueFromString(el.getTag(OSMTagKey.PLACE));
} }
@ -87,11 +86,6 @@ public class City extends MapObject<Node> {
return streets.values(); return streets.values();
} }
@Override
public Node getEntity() {
return el;
}
@Override @Override
public String toString() { public String toString() {
return "City [" +type+"] " + getName(); return "City [" +type+"] " + getName();

View file

@ -10,9 +10,22 @@ public abstract class MapObject<T extends Entity> implements Comparable<MapObjec
protected String name = null; protected String name = null;
protected LatLon location = null; protected LatLon location = null;
protected Long id = null; protected Long id = null;
// could be null // could be null
public abstract T getEntity(); protected T entity = null;
public MapObject(){}
public MapObject(T e){
entity = e;
}
public T getEntity(){
return entity;
}
public void setEntity(T e){
entity = e;
}
public void setId(Long id) { public void setId(Long id) {
this.id = id; this.id = id;

View file

@ -10,15 +10,15 @@ import java.util.Map;
import com.osmand.Algoritms; import com.osmand.Algoritms;
import com.osmand.data.City.CityType; import com.osmand.data.City.CityType;
import com.osmand.osm.Entity;
import com.osmand.osm.LatLon; import com.osmand.osm.LatLon;
import com.osmand.osm.MapUtils; import com.osmand.osm.MapUtils;
import com.osmand.osm.Node; import com.osmand.osm.Node;
import com.osmand.osm.io.OsmBaseStorage; import com.osmand.osm.io.OsmBaseStorage;
public class Region { public class Region extends MapObject<Entity> {
private DataTileManager<Amenity> amenities = new DataTileManager<Amenity>(); private DataTileManager<Amenity> amenities = new DataTileManager<Amenity>();
private String name;
private OsmBaseStorage storage; private OsmBaseStorage storage;
private static class CityComparator implements Comparator<City>{ private static class CityComparator implements Comparator<City>{
@ -41,8 +41,6 @@ public class Region {
this.name = "Region"; this.name = "Region";
} }
public OsmBaseStorage getStorage() { public OsmBaseStorage getStorage() {
return storage; return storage;
} }
@ -52,14 +50,6 @@ public class Region {
} }
public String getName(){
return name;
}
public void setName(String name) {
this.name = name;
}
public Collection<City> getCitiesByType(CityType type){ public Collection<City> getCitiesByType(CityType type){
return cities.get(type); return cities.get(type);
} }

View file

@ -14,7 +14,6 @@ public class Street extends MapObject<Entity> {
private List<Building> buildings = new ArrayList<Building>(); private List<Building> buildings = new ArrayList<Building>();
private List<Node> wayNodes = new ArrayList<Node>(); private List<Node> wayNodes = new ArrayList<Node>();
private Node center = null;
public Street(String name){ public Street(String name){
this.name = name; this.name = name;
@ -37,15 +36,15 @@ public class Street extends MapObject<Entity> {
} }
public LatLon getLocation(){ public LatLon getLocation(){
if(center == null){ if(entity == null){
calculateCenter(); calculateCenter();
} }
return center == null ? null : center.getLatLon(); return entity == null ? null : entity.getLatLon();
} }
protected void calculateCenter(){ protected void calculateCenter(){
if(wayNodes.size() == 1){ if(wayNodes.size() == 1){
center = wayNodes.get(0); entity = wayNodes.get(0);
return; return;
} }
LatLon c = MapUtils.getWeightCenterForNodes(wayNodes); LatLon c = MapUtils.getWeightCenterForNodes(wayNodes);
@ -54,7 +53,7 @@ public class Street extends MapObject<Entity> {
if (n != null) { if (n != null) {
double nd = MapUtils.getDistance(n, c); double nd = MapUtils.getDistance(n, c);
if (nd < dist) { if (nd < dist) {
center = n; entity = n;
dist = nd; dist = nd;
} }
} }
@ -71,9 +70,4 @@ public class Street extends MapObject<Entity> {
Collections.sort(buildings); Collections.sort(buildings);
} }
@Override
public Entity getEntity() {
return center;
}
} }

View file

@ -311,20 +311,24 @@ public class MapPanel extends JPanel implements IMapDownloaderCallback {
@Override @Override
public void tileDownloaded(DownloadRequest request) { public void tileDownloaded(DownloadRequest request) {
if(request == null){
prepareImage(false);
return;
}
int tileSize = getTileSize(); int tileSize = getTileSize();
double xTileLeft = getXTile() - getSize().width / (2d * tileSize); double xTileLeft = getXTile() - getSize().width / (2d * tileSize);
double yTileUp = getYTile() - getSize().height / (2d * tileSize); double yTileUp = getYTile() - getSize().height / (2d * tileSize);
int i = request.xTile - (int)xTileLeft; int i = request.xTile - (int)xTileLeft;
int j = request.yTile - (int)yTileUp; int j = request.yTile - (int)yTileUp;
if(request.zoom == this.zoom && if (request.zoom == this.zoom && (i >= 0 && i < images.length) && (j >= 0 && j < images[i].length)) {
(i >=0 && i<images.length) && (j>=0 && j< images[i].length)){
try { try {
System.out.println();
images[i][j] = getImageFor(request.xTile, request.yTile, zoom, false); images[i][j] = getImageFor(request.xTile, request.yTile, zoom, false);
repaint(); repaint();
} catch (IOException e) { } catch (IOException e) {
log.error("Eror reading png " + request.xTile +" " + request.yTile + " zoom : " + zoom, e); log.error("Eror reading png " + request.xTile + " " + request.yTile + " zoom : " + zoom, e);
} }
} }
} }

View file

@ -260,9 +260,14 @@ public class OsmExtractionUI implements IMapLocationListener {
DefaultMutableTreeNode node; DefaultMutableTreeNode node;
node = (DefaultMutableTreeNode) node = (DefaultMutableTreeNode)
(e.getTreePath().getLastPathComponent()); (e.getTreePath().getLastPathComponent());
if(node instanceof DataExtractionTreeNode && ((DataExtractionTreeNode) node).getModelObject() instanceof Region){ if(node instanceof DataExtractionTreeNode){
Region r = (Region) ((DataExtractionTreeNode) node).getModelObject(); if(((DataExtractionTreeNode) node).getModelObject() instanceof Region){
r.setName(node.getUserObject().toString()); Region r = (Region) ((DataExtractionTreeNode) node).getModelObject();
r.setName(node.getUserObject().toString());
} else if(((DataExtractionTreeNode) node).getModelObject() instanceof MapObject<?>){
MapObject<?> r = (MapObject<?>) ((DataExtractionTreeNode) node).getModelObject();
r.setName(node.getUserObject().toString());
}
} }
} }
public void treeNodesInserted(TreeModelEvent e) { public void treeNodesInserted(TreeModelEvent e) {
@ -726,7 +731,7 @@ public class OsmExtractionUI implements IMapLocationListener {
Object node = tree.getLastSelectedPathComponent(); Object node = tree.getLastSelectedPathComponent();
if (node instanceof DataExtractionTreeNode) { if (node instanceof DataExtractionTreeNode) {
DataExtractionTreeNode treeNode = (DataExtractionTreeNode) node; DataExtractionTreeNode treeNode = (DataExtractionTreeNode) node;
if (treeNode.getModelObject() instanceof Region) { if (treeNode.getModelObject() instanceof Region || treeNode.getModelObject() instanceof MapObject<?>) {
return true; return true;
} }
} }

View file

@ -2,7 +2,7 @@
<resources> <resources>
<string name="show_poi_over_map_description">Show POI on map</string> <string name="show_poi_over_map_description">Show POI on map</string>
<string name="show_poi_over_map">Show POI</string> <string name="show_poi_over_map">Show POI</string>
<string name="map_tile_source_descr">Choose the source of tiles</string> <string name="map_tile_source_descr">Choose the source of tiles:</string>
<string name="map_tile_source">Map tile source</string> <string name="map_tile_source">Map tile source</string>
<string name="map_source">Map source</string> <string name="map_source">Map source</string>
<string name="use_internet">Use internet</string> <string name="use_internet">Use internet</string>

View file

@ -207,7 +207,8 @@ public class ResourceManager {
try { try {
OsmBaseStorage storage = new OsmBaseStorage(); OsmBaseStorage storage = new OsmBaseStorage();
stream = new FileInputStream(f); stream = new FileInputStream(f);
stream = new BufferedInputStream(stream); // stream = new BufferedInputStream(stream);
InputStream streamForProgress = stream;
if (zipped) { if (zipped) {
if (stream.read() != 'B' || stream.read() != 'Z') { if (stream.read() != 'B' || stream.read() != 'Z') {
log.error("Can't read poi file " + f.getAbsolutePath() log.error("Can't read poi file " + f.getAbsolutePath()
@ -220,7 +221,7 @@ public class ResourceManager {
if(progress != null){ if(progress != null){
progress.startTask("Indexing poi " + f.getName(), stream.available()); progress.startTask("Indexing poi " + f.getName(), stream.available());
} }
storage.parseOSM(stream, progress); storage.parseOSM(stream, progress, streamForProgress);
for (Entity e : storage.getRegisteredEntities().values()) { for (Entity e : storage.getRegisteredEntities().values()) {
if (e instanceof Node && Amenity.isAmenity((Node) e)) { if (e instanceof Node && Amenity.isAmenity((Node) e)) {
poiIndex.registerObject(((Node)e).getLatitude(), ((Node)e).getLongitude(), new Amenity((Node) e)); poiIndex.registerObject(((Node)e).getLatitude(), ((Node)e).getLongitude(), new Amenity((Node) e));

View file

@ -42,22 +42,22 @@ public class SettingsActivity extends PreferenceActivity implements OnPreference
@Override @Override
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
useInternetToDownloadTiles.setChecked(OsmandSettings.isUsingInternetToDownloadTiles(this)); useInternetToDownloadTiles.setChecked(OsmandSettings.isUsingInternetToDownloadTiles(this));
showPoiOnMap.setChecked(OsmandSettings.isShowingPoiOverMap(this)); showPoiOnMap.setChecked(OsmandSettings.isShowingPoiOverMap(this));
List<TileSourceTemplate> list = TileSourceManager.getKnownSourceTemplates(); List<TileSourceTemplate> list = TileSourceManager.getKnownSourceTemplates();
String[] entries = new String[list.size()]; String[] entries = new String[list.size()];
for(int i=0; i<list.size(); i++){ for (int i = 0; i < list.size(); i++) {
entries[i] = list.get(i).getName(); entries[i] = list.get(i).getName();
} }
tileSourcePreference.setEntries(entries); tileSourcePreference.setEntries(entries);
tileSourcePreference.setEntryValues(entries); tileSourcePreference.setEntryValues(entries);
tileSourcePreference.setValue(OsmandSettings.getMapTileSourceName(this)); tileSourcePreference.setValue(OsmandSettings.getMapTileSourceName(this));
tileSourcePreference.setSummary(tileSourcePreference.getSummary() + "\t\t[" + OsmandSettings.getMapTileSourceName(this)+"]"); String mapName = " " +OsmandSettings.getMapTileSourceName(this);
tileSourcePreference.setSummary(tileSourcePreference.getSummary() + mapName);
} }
@Override @Override
@ -73,6 +73,13 @@ public class SettingsActivity extends PreferenceActivity implements OnPreference
} else if (preference == tileSourcePreference) { } else if (preference == tileSourcePreference) {
edit.putString(OsmandSettings.MAP_TILE_SOURCES, (String) newValue); edit.putString(OsmandSettings.MAP_TILE_SOURCES, (String) newValue);
edit.commit(); edit.commit();
String summary = tileSourcePreference.getSummary().toString();
if (summary.lastIndexOf(':') != -1) {
summary = summary.substring(0, summary.lastIndexOf(':') + 1);
}
summary += " " + OsmandSettings.getMapTileSourceName(this);
tileSourcePreference.setSummary(summary);
} }
return true; return true;
} }

View file

@ -13,6 +13,7 @@ public class PointLocationLayer implements OsmandMapLayer {
private Paint area; private Paint area;
protected Location lastKnownLocation = null; protected Location lastKnownLocation = null;
protected final static int RADIUS = 7;
private OsmandMapTileView view; private OsmandMapTileView view;
private void initUI() { private void initUI() {
@ -52,9 +53,9 @@ public class PointLocationLayer implements OsmandMapLayer {
.getAccuracy(), view.getTileSize(), view.getWidth()); .getAccuracy(), view.getTileSize(), view.getWidth());
if (locationX >= 0 && locationY >= 0) { if (locationX >= 0 && locationY >= 0) {
canvas.drawCircle(locationX, locationY, 4, location); canvas.drawCircle(locationX, locationY, RADIUS, location);
} }
if (radius > 4) { if (radius > RADIUS) {
canvas.drawCircle(locationX, locationY, radius, area); canvas.drawCircle(locationX, locationY, radius, area);
} }
} }