diff --git a/OsmAnd-java/src/net/osmand/render/RenderingRuleStorageProperties.java b/OsmAnd-java/src/net/osmand/render/RenderingRuleStorageProperties.java index e28f8f8a80..56b90ea803 100644 --- a/OsmAnd-java/src/net/osmand/render/RenderingRuleStorageProperties.java +++ b/OsmAnd-java/src/net/osmand/render/RenderingRuleStorageProperties.java @@ -33,6 +33,7 @@ public class RenderingRuleStorageProperties { public static final String SHADOW_RADIUS = "shadowRadius"; public static final String SHADOW_COLOR = "shadowColor"; public static final String ONEWAY_ARROWS_COLOR = "onewayArrowsColor"; + public static final String IGNORE_POLYGON_AS_POINT_AREA = "ignorePolygonAsPointArea"; public static final String SHADER = "shader"; public static final String CAP_5 = "cap_5"; public static final String CAP_4 = "cap_4"; @@ -108,6 +109,7 @@ public class RenderingRuleStorageProperties { public RenderingRuleProperty R_SHADOW_COLOR; public RenderingRuleProperty R_SHADER; public RenderingRuleProperty R_ONEWAY_ARROWS_COLOR; + public RenderingRuleProperty R_IGNORE_POLYGON_AS_POINT_AREA; public RenderingRuleProperty R_CAP_5; public RenderingRuleProperty R_CAP_4; public RenderingRuleProperty R_CAP_3; @@ -300,6 +302,7 @@ public class RenderingRuleStorageProperties { R_SHADOW_RADIUS = registerRuleInternal(RenderingRuleProperty.createOutputFloatProperty(SHADOW_RADIUS)); R_ONEWAY_ARROWS_COLOR = registerRuleInternal(RenderingRuleProperty.createOutputColorProperty(ONEWAY_ARROWS_COLOR)); + R_IGNORE_POLYGON_AS_POINT_AREA = registerRuleInternal(RenderingRuleProperty.createOutputBooleanProperty(IGNORE_POLYGON_AS_POINT_AREA)); } public RenderingRuleProperty get(String name) { diff --git a/OsmAnd/src/net/osmand/plus/render/OsmandRenderer.java b/OsmAnd/src/net/osmand/plus/render/OsmandRenderer.java index 426fdc7b1f..4499966d54 100644 --- a/OsmAnd/src/net/osmand/plus/render/OsmandRenderer.java +++ b/OsmAnd/src/net/osmand/plus/render/OsmandRenderer.java @@ -66,6 +66,7 @@ public class OsmandRenderer { public static final int TILE_SIZE = 256; private static final int MAX_V = 75; + private static final int MAX_V_AREA = 185; private Map dashEffect = new LinkedHashMap(); private Map parsedDashEffects = new LinkedHashMap(); @@ -81,6 +82,7 @@ public class OsmandRenderer { BinaryMapDataObject obj; int typeInd; double order; + double area; int objectType; }; @@ -231,7 +233,8 @@ public class OsmandRenderer { continue; } // polygon - drawPolygon(mObj, req, cv, rc, pair); + + drawPolygon(mObj, req, cv, rc, pair, array.get(i).area); } else if (objOrder == 1 || objOrder == 2) { drawPolyline(mObj, req, cv, rc, pair, mObj.getSimpleLayer(), objOrder == 1); } else if (objOrder == 3) { @@ -469,6 +472,7 @@ public class OsmandRenderer { render.setBooleanFilter(render.ALL.R_CYCLE, o.isCycle()); if (render.search(RenderingRulesStorage.ORDER_RULES)) { int objectType = render.getIntPropertyValue(render.ALL.R_OBJECT_TYPE); + boolean ignorePointArea = render.getIntPropertyValue(render.ALL.R_IGNORE_POLYGON_AS_POINT_AREA) != 0; int order = render.getIntPropertyValue(render.ALL.R_ORDER); MapDataObjectPrimitive mapObj = new MapDataObjectPrimitive(); mapObj.objectType = objectType; @@ -479,10 +483,13 @@ public class OsmandRenderer { MapDataObjectPrimitive pointObj = mapObj; pointObj.objectType = 1; double area = polygonArea(mapObj, mult); + mapObj.area = area; if(area > MAX_V) { mapObj.order = mapObj.order + (1. / area); polygonsArray.add(mapObj); - pointsArray.add(pointObj); // TODO fix duplicate text? verify if it is needed for icon + if(area > MAX_V_AREA || ignorePointArea) { + pointsArray.add(pointObj); + } } } else if(objectType == 1) { pointsArray.add(mapObj); @@ -599,7 +606,8 @@ public class OsmandRenderer { shaders.clear(); } - private void drawPolygon(BinaryMapDataObject obj, RenderingRuleSearchRequest render, Canvas canvas, RenderingContext rc, TagValuePair pair) { + private void drawPolygon(BinaryMapDataObject obj, RenderingRuleSearchRequest render, Canvas canvas, RenderingContext rc, TagValuePair pair, + double area) { if(render == null || pair == null){ return; } @@ -656,7 +664,10 @@ public class OsmandRenderer { if (updatePaint(render, paint, 1, false, rc)) { canvas.drawPath(path, paint); } - textRenderer.renderText(obj, render, rc, pair, xText / len, yText / len, null, null); + boolean ignorePointArea = render.getIntPropertyValue(render.ALL.R_IGNORE_POLYGON_AS_POINT_AREA) != 0; + if(area > MAX_V_AREA || ignorePointArea) { + textRenderer.renderText(obj, render, rc, pair, xText / len, yText / len, null, null); + } } }