logo separator

[mkgmap-dev] Little assist needed from the style code implementors

From Steve Ratcliffe steve at parabola.me.uk on Mon Sep 13 09:52:51 BST 2010

On 12/09/10 21:08, WanMil wrote:
> Hi,
>
> I have rather finished the changes for the new multipolygon line/polygon
> tag handling (see
> http://www.mkgmap.org.uk/pipermail/mkgmap-dev/2010q3/008977.html). But I
> need some quick help from someone who known the Java internals of the
> style processing.
>
> All line rules should be executed only if the line contains the tag
> "mkgmap:styleusage=line" or if the tag is not set. The same for polygons
> with "mkgmap:styleusage=polygon".
> I think this should be easy with an AndOp? But I don't know how to set
> this rule to the lines/polygons RuleSet in StyleImpl. Any suggestions?

The way is converted into a garmin element by OsmConverter.convertWay().
It matches against both line and polygon rules together because normally
it doesn't know if something is a line or a polygon.

As I understand your change you want to mark ways as being definitely a
polygon or definitely a line and only match against the polygon or line
rules respectively.

I would do this by adding the hint to the Element (or Way) and then
catching this in convertWay().

This incomplete patch shows what I mean:

Index: src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java	(revision 1677)
+++ src/uk/me/parabola/mkgmap/osmstyle/StyledConverter.java	(revision )
@@ -278,7 +278,15 @@

  		preConvertRules(way);

-		wayRules.resolveType(way, new TypeResult() {
+		Rule rules;
+		if (way.getKind() == GType.POLYLINE)
+			rules = lineRules;
+		else if (way.getKind() == GType.POLYGON)
+			rules = polygonRules;
+		else
+			rules = wayRules;
+
+		rules.resolveType(way, new TypeResult() {
  			public void add(Element el, GType type) {
  				if (type.isContinueSearch()) {
  					// If not already copied, do so now

In this waysRules exists already and it is the union of linesRules and
polygonRules (you would have to make them available separately).
You set way.kind to be POLYLINE or POLYGON or leave it unset in the
normal case.

..Steve



More information about the mkgmap-dev mailing list