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

Reply via email to