Hi,

the following quote from cGPSmapper describes peculiarities of command "Background=Y":

If there is only one object set as the background, then the
EndLevel is automatically set to 9.
If there is no background object, or more than one, then the
EndLevel is not changed.

As I understand, background is a special object for cGPSmapper. If there is only single background in a source, then compiler can modify EndLevel value.

Mkgmap doesn't change EndLevel. I prepared a patch, that simply extends EndLevel for any background object, which contains only "Data0=" layer. I hope this should work for most cases.

Proper solution would be to count all background objects and conditionally modify single background after reading an entire source file.

--
Best regards,
Andrzej
Index: src/uk/me/parabola/mkgmap/reader/polish/PolishMapDataSource.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/polish/PolishMapDataSource.java    
(revision 4465)
+++ src/uk/me/parabola/mkgmap/reader/polish/PolishMapDataSource.java    
(working copy)
@@ -104,6 +104,8 @@
        private int endLevel;
        private char elevUnits;
        private int currentLevel;
+       private boolean dataHighLevel;
+       private boolean background;
        private int poiDispFlag;
        private String defaultCountry;
        private String defaultRegion;
@@ -306,6 +308,8 @@
                        if (!lineStringMap.isEmpty()) {
                                if (extraAttributes != null && 
shape.hasExtendedType())
                                        
shape.setExtTypeAttributes(makeExtTypeAttributes());
+                               if (background && !dataHighLevel)
+                                       endLevel = levels.length -1;
                                for (Map.Entry<Integer , List<List<Coord>>> 
entry : lineStringMap.entrySet()) {
                                        setResolution(shape, entry.getKey());
                                        addShapesFromPattern(entry.getValue());
@@ -329,6 +333,8 @@
                endLevel = 0;
                lineStringMap.clear();
                currentLevel = 0;
+               dataHighLevel = false;
+               background = false;
        }
 
        private void addShapesFromPattern(List<List<Coord>> pointsLists) {
@@ -595,6 +601,9 @@
                } else if (name.startsWith("Data")) {
                        extractResolution(name);
                        addLineString(value, true);
+               } else if (name.equals("Background")) {
+                       if ("Y".equals(value))
+                               background = true;
                }
                else {
                        if(extraAttributes == null)
@@ -765,6 +774,8 @@
         */
        private int extractResolution(String name) {
                currentLevel = Integer.parseInt(name.substring(name.charAt(0) 
== 'O'? 6: 4));
+               if (currentLevel > 0)
+                       dataHighLevel = true;
                return extractResolution(currentLevel);
        }
 
_______________________________________________
mkgmap-dev mailing list
mkgmap-dev@lists.mkgmap.org.uk
http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev

Reply via email to