Add missing map message

This commit is contained in:
Victor Shcherb 2012-06-02 18:28:50 +02:00
parent 15f307a155
commit d7a9b434c4
6 changed files with 48 additions and 29 deletions

View file

@ -1387,7 +1387,7 @@ public class BinaryMapIndexReader {
}
}
private void initMapEncodingRule(int type, int id, String tag, String val) {
public void initMapEncodingRule(int type, int id, String tag, String val) {
if(!encodingRules.containsKey(tag)){
encodingRules.put(tag, new LinkedHashMap<String, Integer>());
}

View file

@ -6,6 +6,9 @@
<type tag="oneway" value="yes" minzoom="15" additional="true"/>
<type tag="oneway" value="no" minzoom="15" additional="true"/>
<type tag="oneway" value="-1" minzoom="15" additional="true"/>
<type tag="access" value="no" minzoom="15" additional="true"/>
<type tag="access" value="private" minzoom="15" additional="true"/>
<type tag="access" value="yes" minzoom="15" additional="true"/>
<type tag="layer" value="0" minzoom="10" additional="true"/>
<type tag="layer" value="1" minzoom="10" additional="true"/>

View file

@ -1101,9 +1101,15 @@
<filter minzoom="17" maxzoom="17" strokeWidth="15" strokeWidth_2="13"/>
<filter minzoom="18" strokeWidth="20" strokeWidth_2="18"/>
<groupFilter>
<filter additional="access=no" nightMode="true" color="#ffffff" color_2="#9F9F9F" color_3="#F7D4D4" strokeWidth_3="5" pathEffect_3="10_2"/>
<filter nightMode="true" color="#ffffff" color_2="#9F9F9F"/>
<filter additional="access=no" color_3="#F7D4D4" strokeWidth_3="5" pathEffect_3="10_2"/>
<filter/>
<groupFilter>
<filter additional="access=no" />
<filter additional="access=private" />
<groupFilter>
<filter color_3="#F7D4D4" strokeWidth_3="5" pathEffect_3="10_2"/>
</groupFilter>
</groupFilter>
</groupFilter>
</filter>
<filter>
@ -1117,11 +1123,17 @@
<filter minzoom="17" maxzoom="17" strokeWidth="13"/>
<filter minzoom="18" strokeWidth="18"/>
<groupFilter>
<filter layer="-1" nightMode="true" color="#9F9F9F" color_2="#9F9F9F" pathEffect="4_4" cap="BUTT"/>
<!-- <filter layer="-1" nightMode="true" color="#9F9F9F" color_2="#9F9F9F" pathEffect="4_4" cap="BUTT"/>
<filter layer="-1" pathEffect="4_4" cap="BUTT"/>
<filter additional="access=no" nightMode="true" color="#9F9F9F" color_2="#9F9F9F" color_3="#F7D4D4" strokeWidth_3="5" pathEffect_3="10_2"/>
<filter nightMode="true" color="#9F9F9F" color_2="#9F9F9F"/>
<filter nightMode="true" color="#9F9F9F" color_2="#9F9F9F" />
<filter/>
<groupFilter> -->
<filter additional="access=no" color_3="#F7D4D4" strokeWidth_3="5" pathEffect_3="10_2"/>
<filter additional="access=private" color_3="#F7D4D4" strokeWidth_3="5" pathEffect_3="10_2"/>
<groupFilter>
<filter color_3="#F7D4D4" strokeWidth_3="5" pathEffect_3="10_2"/>
</groupFilter>
<!-- </groupFilter> -->
</groupFilter>
</filter>
</groupFilter>

View file

@ -204,7 +204,7 @@ public class MapRenderRepositories {
}
public boolean updateMapIsNeeded(RotatedTileBox box, DrawSettings drawSettings) {
if (files.isEmpty() || box == null) {
if (box == null) {
return false;
}
if (requestedBox == null) {
@ -305,11 +305,6 @@ public class MapRenderRepositories {
long now = System.currentTimeMillis();
if (files.isEmpty()) {
cObjectsBox = dataBox;
cObjects = new ArrayList<BinaryMapDataObject>();
return true;
}
try {
System.gc(); // to clear previous objects
int count = 0;
@ -398,7 +393,8 @@ public class MapRenderRepositories {
String coastlineTime = "";
boolean addBasemapCoastlines = true;
boolean emptyData = zoom > BASEMAP_ZOOM && tempResult.isEmpty() && coastLines.isEmpty() ;
boolean emptyData = zoom > BASEMAP_ZOOM && tempResult.isEmpty() && coastLines.isEmpty();
boolean basemapMissing = zoom <= BASEMAP_ZOOM && basemapCoastLines.isEmpty() && mi == null;
if(!coastLines.isEmpty()) {
long ms = System.currentTimeMillis();
@ -420,14 +416,21 @@ public class MapRenderRepositories {
o.setMapIndex(mi);
tempResult.add(o);
}
if(emptyData && tempResult.size() > 0){
if(emptyData || basemapMissing){
// message
BinaryMapDataObject p = tempResult.get(0);
MapIndex mapIndex;
if(!tempResult.isEmpty()) {
mapIndex = tempResult.get(0).getMapIndex();
} else {
mapIndex = new MapIndex();
mapIndex.initMapEncodingRule(0, 1, "natural", "coastline");
mapIndex.initMapEncodingRule(0, 2, "name", "");
}
// avoid overflow int errors
BinaryMapDataObject o = new BinaryMapDataObject(new int[] { leftX + (rightX - leftX) / 2, topY + (bottomY - topY) / 2 },
new int[] { p.getMapIndex().coastlineEncodingType }, null, -1);
o.setMapIndex(p.getMapIndex());
o.putObjectName(o.getMapIndex().nameEncodingType, context.getString(R.string.switch_to_raster_map_to_see));
new int[] { mapIndex.coastlineEncodingType }, null, -1);
o.setMapIndex(mapIndex);
o.putObjectName(mapIndex.nameEncodingType, context.getString(R.string.switch_to_raster_map_to_see));
tempResult.add(o);
}
if(zoom <= BASEMAP_ZOOM || emptyData) {

View file

@ -195,17 +195,17 @@ public class OsmandRenderer {
public void generateNewBitmap(RenderingContext rc, List<BinaryMapDataObject> objects, Bitmap bmp,
RenderingRuleSearchRequest render, final List<IMapDownloaderCallback> notifyList) {
long now = System.currentTimeMillis();
if (objects != null && !objects.isEmpty() && rc.width > 0 && rc.height > 0) {
// init rendering context
rc.tileDivisor = (int) (1 << (31 - rc.zoom));
rc.cosRotateTileSize = FloatMath.cos((float) Math.toRadians(rc.rotate)) * TILE_SIZE;
rc.sinRotateTileSize = FloatMath.sin((float) Math.toRadians(rc.rotate)) * TILE_SIZE;
// fill area
Canvas cv = new Canvas(bmp);
if (rc.defaultColor != 0) {
cv.drawColor(rc.defaultColor);
}
if (objects != null && !objects.isEmpty() && rc.width > 0 && rc.height > 0) {
// init rendering context
rc.tileDivisor = (int) (1 << (31 - rc.zoom));
rc.cosRotateTileSize = FloatMath.cos((float) Math.toRadians(rc.rotate)) * TILE_SIZE;
rc.sinRotateTileSize = FloatMath.sin((float) Math.toRadians(rc.rotate)) * TILE_SIZE;
// put in order map
TIntObjectHashMap<TIntArrayList> orderMap = sortObjectsByProperOrder(rc, objects, render);
@ -273,8 +273,6 @@ public class OsmandRenderer {
log.info(rc.renderingDebugInfo);
}
return;
}
private void notifyListenersWithDelay(final RenderingContext rc, final List<IMapDownloaderCallback> notifyList, final Handler h) {

View file

@ -714,6 +714,7 @@ ResultPublisher* searchObjectsForRendering(SearchQuery* q, bool skipDuplicates,
std::vector<MapDataObject*> coastLines;
std::vector<MapDataObject*> basemapCoastLines;
bool basemapExists = false;
for (; i != openFiles.end() && !q->publisher->isCancelled(); i++) {
BinaryMapFile* file = i->second;
fseek(file->f, 0, 0);
@ -732,6 +733,7 @@ ResultPublisher* searchObjectsForRendering(SearchQuery* q, bool skipDuplicates,
if (q->publisher->isCancelled()) {
break;
}
basemapExists |= file->isBasemap();
if (mapLevel->minZoom <= q->zoom && mapLevel->maxZoom >= q->zoom) {
if (mapLevel->right >= q->left && q->right >= mapLevel->left && mapLevel->bottom >= q->top
&& q->bottom >= mapLevel->top) {
@ -784,6 +786,7 @@ ResultPublisher* searchObjectsForRendering(SearchQuery* q, bool skipDuplicates,
} else {
bool addBasemapCoastlines = true;
bool emptyData = q->zoom > BASEMAP_ZOOM && tempResult.empty() && coastLines.empty();
bool basemapMissing = q->zoom <= BASEMAP_ZOOM && basemapCoastLines.empty() && !basemapExists;
if (!coastLines.empty()) {
bool coastlinesWereAdded = processCoastlines(coastLines, q->left, q->right, q->bottom, q->top, q->zoom,
basemapCoastLines.empty(), true, tempResult);
@ -812,7 +815,7 @@ ResultPublisher* searchObjectsForRendering(SearchQuery* q, bool skipDuplicates,
}
tempResult.push_back(o);
}
if (emptyData) {
if (emptyData || basemapMissing) {
// message
// avoid overflow int errors
MapDataObject* o = new MapDataObject();