Hi Gerd,

I have compiled baddem6 and I confirm your observations. I have no idea, what to do with it.

I have found a minor error, see attached patch. Mkgmap calculates min/max heights for header using values form tiles, which have bitstream data. This is wrong for flat surfaces, which have height but no bitstream and for voids, which have bitstream without real heights.

I also removed bitstream for tiles with all voids, but I don't know the reason for putting it in first place, so maybe it is wrong change.

--
Best regards,
Andrzej
Index: src/uk/me/parabola/imgfmt/app/dem/DEMSection.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/dem/DEMSection.java   (revision 4104)
+++ src/uk/me/parabola/imgfmt/app/dem/DEMSection.java   (working copy)
@@ -126,8 +126,7 @@
                                tiles.add(tile);
                                if (tile.getEncodingType() != 0)
                                        hasExtra = true;
-                               int bsLen = tile.getBitStreamLen();
-                               if (bsLen > 0) {
+                               if (tile.validHeights()) {
                                        if (tile.getBaseHeight() < 
minBaseHeight)
                                                minBaseHeight = 
tile.getBaseHeight();
                                        if (tile.getBaseHeight() > 
maxBaseHeight)
@@ -136,8 +135,8 @@
                                                maxHeight = tile.getMaxHeight();
                                        if (tile.getMaxDeltaHeight() > 
maxDeltaHeight)
                                                maxDeltaHeight = 
tile.getMaxDeltaHeight();
-                                       dataLen += bsLen;
                                }
+                               dataLen += tile.getBitStreamLen();
                        }
                        if (lastLevel) {
                                hgtConverter.freeMem();
Index: src/uk/me/parabola/imgfmt/app/dem/DEMTile.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/dem/DEMTile.java      (revision 4104)
+++ src/uk/me/parabola/imgfmt/app/dem/DEMTile.java      (working copy)
@@ -43,6 +43,7 @@
        private final int baseHeight;           // base or minimum height in 
this tile 
        private final int maxDeltaHeight;       // delta between max height and 
base height
        private final byte encodingType;        // determines how the highest 
values are displayed 
+       private final boolean hasData;          // not all voids
 
        private int bitPos;
        private byte currByte;
@@ -94,18 +95,18 @@
                }
                if (min == Integer.MAX_VALUE) {
                        // all values are invalid 
+                       hasData = false;
                        encodingType = 2;
                        min = 0;
-                       max = 1;
-                       // seems we still need a bit stream in this case
-                       realHeights = new short[width * height];
-                       Arrays.fill(realHeights, HGTReader.UNDEF);
+                       max = 0;
                } else if (countInvalid > 0) {
                        // some values are invalid
+                       hasData = true;
                        encodingType = 2; // don't display highest value 
                        max++;
                } else {
                        // all height values are valid
+                       hasData = true;
                        encodingType = 0;
                }
 
@@ -117,6 +118,10 @@
                createBitStream(realHeights);
        }
        
+       public boolean validHeights() {
+               return hasData;
+       }
+
        public int getBaseHeight() {
                return baseHeight;
        }
_______________________________________________
mkgmap-dev mailing list
mkgmap-dev@lists.mkgmap.org.uk
http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev

Reply via email to