Hi Gerd Realising that something is increasing the number of lines in a subdivision and I wasn't getting the problem with my build I remembered I'd noticed that this could happen due to changes made to the line filtering in the low-res-opt branch work and supplied filterOrderLowRes.patch to restore some of the vital orderings - see forwarded email.
The vital part is relating to MapSplitter/Area predicting the maximum number of splits to a line after RoundCoords & RemoveObsoletePoints have done their work. Attached is patch of the code I've been using appropriate to trunk. Ticker -------- Forwarded Message -------- From: Ticker Berkin <rwb-mkg...@jagit.co.uk> To: Development list for mkgmap <mkgmap-dev@lists.mkgmap.org.uk> Subject: Re: [mkgmap-dev] Problems with sea in overview map Date: Fri, 21 May 2021 17:10:07 +0100 Hi Gerd I'd been doing some investigation of filters ordering (based on trunk). I'd also done the pre-filtering of lines & shapes by minRes. My conclusions are: Shapes: It is better to run SizeFilter after RemoveObsoleteFilter. It is more efficient to run DP filter after both of these. Lines: LineSplitterFilter should be run after everything that can remove points. It is more efficient to run DP after RemoveObsoleteFilter. I've adapted my changes into a patch for the low-res-opt branch, along with removal of some resolution tests that are now redundant. For the contourFilters, I've left DP as the first filter but moved
Index: src/uk/me/parabola/mkgmap/build/MapBuilder.java =================================================================== --- src/uk/me/parabola/mkgmap/build/MapBuilder.java (revision 4907) +++ src/uk/me/parabola/mkgmap/build/MapBuilder.java (working copy) @@ -1245,6 +1245,7 @@ LayerFilterChain normalFilters = new LayerFilterChain(config); LayerFilterChain keepParallelFilters = new LayerFilterChain(config); + DouglasPeuckerFilter dp = null; if (enableLineCleanFilters && (res < 24)) { MapFilter rounder = new RoundCoordsFilter(); MapFilter sizeFilter = new SizeFilter(MIN_SIZE_LINE); @@ -1252,17 +1253,20 @@ normalFilters.addFilter(sizeFilter); double errorForRes = dpFilterLineResMap.ceilingEntry(res).getValue(); if(errorForRes > 0) { - DouglasPeuckerFilter dp = new DouglasPeuckerFilter(errorForRes); - normalFilters.addFilter(dp); + dp = new DouglasPeuckerFilter(errorForRes); keepParallelFilters.addFilter(dp); } keepParallelFilters.addFilter(rounder); keepParallelFilters.addFilter(sizeFilter); } + RemoveObsoletePointsFilter removeObsolete = new RemoveObsoletePointsFilter(); + normalFilters.addFilter(removeObsolete); + keepParallelFilters.addFilter(removeObsolete); + if (dp != null) + normalFilters.addFilter(dp); for (MapFilter filter : Arrays.asList( + new RemoveEmpty(), new LineSplitterFilter(), - new RemoveEmpty(), - new RemoveObsoletePointsFilter(), new LinePreparerFilter(div), new LineAddFilter(div, map))) { normalFilters.addFilter(filter); @@ -1310,6 +1314,9 @@ filters.addFilter(new PolygonSplitterFilter()); if (enableLineCleanFilters && (res < 24)) { filters.addFilter(new RoundCoordsFilter()); + } + filters.addFilter(new RemoveObsoletePointsFilter()); + if (enableLineCleanFilters && (res < 24)) { int sizefilterVal = getMinSizePolygonForResolution(res); if (sizefilterVal > 0) filters.addFilter(new SizeFilter(sizefilterVal)); @@ -1319,7 +1326,6 @@ if(errorForRes > 0) filters.addFilter(new DouglasPeuckerFilter(errorForRes)); } - filters.addFilter(new RemoveObsoletePointsFilter()); filters.addFilter(new RemoveEmpty()); filters.addFilter(new LinePreparerFilter(div)); filters.addFilter(new ShapeAddFilter(div, map));
_______________________________________________ mkgmap-dev mailing list mkgmap-dev@lists.mkgmap.org.uk https://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev