OSM Bright style

245 views
Skip to first unread message

wolfgang...@googlemail.com

unread,
Feb 5, 2013, 5:56:24 AM2/5/13
to mapnik2...@opengeo.org
Hi,

i have successfully installed mapnik2geotools. I convert a few projects in Tilemill 'OpenStreets DC' etc.

But if i export from a project with 'OSM Bright  Style' and export a mapnik.xml file (very big ~3Mb), the mapnik2geotools converter raises an error!

this is the output:

wbr@wilma:/daten/OSM-Daten/mapnik2geotools$ sbt "run-main me.winslow.d.mn2gt.Driver OSMBright.xml --output /tmp"
Detected sbt version 0.11.2
[info] Loading project definition from /daten/OSM-Daten/mapnik2geotools/project
[info] Set current project to mn2gt (in build file:/daten/OSM-Daten/mapnik2geotools/)
[error] java.lang.IllegalArgumentException: requirement failed
[error] at scala.Predef$.require(Predef.scala:145)
[error] at me.winslow.d.mn2gt.MarkersSymbolizerTransformer$.convertMarkersSymbolizer(PointSymbolizers.scala:87)
[error] at me.winslow.d.mn2gt.MarkersSymbolizerTransformer$.transform(PointSymbolizers.scala:132)
[error] at scala.xml.transform.BasicTransformer$$anonfun$1.apply(BasicTransformer.scala:39)
[error] at scala.xml.transform.BasicTransformer$$anonfun$1.apply(BasicTransformer.scala:39)
[error] at scala.collection.TraversableLike$$anonfun$span$1.apply(TraversableLike.scala:505)
[error] at scala.collection.TraversableLike$$anonfun$span$1.apply(TraversableLike.scala:504)
[error] at scala.collection.Iterator$class.foreach(Iterator.scala:660)
[error] at scala.collection.LinearSeqLike$$anon$1.foreach(LinearSeqLike.scala:50)
[error] at scala.collection.IterableLike$class.foreach(IterableLike.scala:73)
[error] at scala.xml.NodeSeq.foreach(NodeSeq.scala:43)
[error] at scala.collection.TraversableLike$class.span(TraversableLike.scala:504)
[error] at scala.xml.NodeSeq.span(NodeSeq.scala:43)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:39)
[error] at scala.xml.transform.RewriteRule.transform(RewriteRule.scala:24)
[error] at scala.xml.transform.RuleTransformer$$anonfun$transform$1.apply(RuleTransformer.scala:16)
[error] at scala.xml.transform.RuleTransformer$$anonfun$transform$1.apply(RuleTransformer.scala:16)
[error] at scala.collection.LinearSeqOptimized$class.foldLeft(LinearSeqOptimized.scala:111)
[error] at scala.collection.immutable.List.foldLeft(List.scala:45)
[error] at scala.xml.transform.RuleTransformer.transform(RuleTransformer.scala:16)
[error] at scala.xml.transform.BasicTransformer$$anonfun$1.apply(BasicTransformer.scala:39)
[error] at scala.xml.transform.BasicTransformer$$anonfun$1.apply(BasicTransformer.scala:39)
[error] at scala.collection.immutable.List.span(List.scala:225)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:39)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:50)
[error] at scala.xml.transform.RuleTransformer.transform(RuleTransformer.scala:16)
[error] at scala.xml.transform.BasicTransformer$$anonfun$1.apply(BasicTransformer.scala:39)
[error] at scala.xml.transform.BasicTransformer$$anonfun$1.apply(BasicTransformer.scala:39)
[error] at scala.collection.immutable.List.span(List.scala:225)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:39)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:50)
[error] at scala.xml.transform.RuleTransformer.transform(RuleTransformer.scala:16)
[error] at scala.xml.transform.BasicTransformer$$anonfun$1.apply(BasicTransformer.scala:39)
[error] at scala.xml.transform.BasicTransformer$$anonfun$1.apply(BasicTransformer.scala:39)
[error] at scala.collection.immutable.List.span(List.scala:225)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:39)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:42)
[error] at scala.xml.transform.BasicTransformer.transform(BasicTransformer.scala:50)
[error] at scala.xml.transform.RuleTransformer.transform(RuleTransformer.scala:16)
[error] at scala.xml.transform.BasicTransformer.apply(BasicTransformer.scala:59)
[error] at scala.xml.transform.BasicTransformer.apply(BasicTransformer.scala:19)
[error] at scala.Function1$$anonfun$andThen$1.apply(Function1.scala:49)
[error] at me.winslow.d.mn2gt.driver.LocalConversion.run(driver.scala:23)
[error] at me.winslow.d.mn2gt.Driver$$anonfun$main$1.apply(CommandLine.scala:60)
[error] at me.winslow.d.mn2gt.Driver$$anonfun$main$1.apply(CommandLine.scala:59)
[error] at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:59)
[error] at scala.collection.immutable.List.foreach(List.scala:45)
[error] at me.winslow.d.mn2gt.Driver$.main(CommandLine.scala:59)
[error] at me.winslow.d.mn2gt.Driver.main(CommandLine.scala)
[error] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[error] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[error] at java.lang.reflect.Method.invoke(Method.java:597)
[error] at scala.tools.nsc.util.ScalaClassLoader$$anonfun$run$1.apply(ScalaClassLoader.scala:78)
[error] at scala.tools.nsc.util.ScalaClassLoader$class.asContext(ScalaClassLoader.scala:24)
[error] at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.asContext(ScalaClassLoader.scala:88)
[error] at scala.tools.nsc.util.ScalaClassLoader$class.run(ScalaClassLoader.scala:78)
[error] at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:101)
[error] at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:33)
[error] at scala.tools.nsc.ObjectRunner$.runAndCatch(ObjectRunner.scala:40)
[error] at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:56)
[error] at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:80)
[error] at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:89)
[error] at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
java.lang.RuntimeException: Nonzero exit code returned from runner: 1
at scala.sys.package$.error(package.scala:27)
[error] {file:/daten/OSM-Daten/mapnik2geotools/}default-056dd1/compile:run-main: Nonzero exit code returned from runner: 1
[error] Total time: 14 s, completed 05.02.2013 11:55:00

i need help !

thanks,
Wolfgang

David Winslow

unread,
Feb 5, 2013, 9:35:05 AM2/5/13
to wolfgang...@googlemail.com, Mapnik to GeoTools Style Conversion
I believe you are encountering the problem discussed in this bug report: https://github.com/dwins/mapnik2geotools/issues/37

Basically, MN2GT checks the version declared in the Mapnik XML and refuses to convert unrecognized versions.  You can try removing the version attribute, but I don't know how good the results will be.

It might be a good improvement to add an option (disabled by default) to ignore the version for cases like this.

--
David Winslow

wolfgang...@googlemail.com

unread,
Feb 6, 2013, 1:06:38 AM2/6/13
to mapnik2...@opengeo.org, wolfgang...@googlemail.com
i don't believe that's the same problem, because the error isn't the same. 
If i understand the following error lines correctly,there is something required for the 'convertMarkersSymbolizer' Block in 'PointSymbolizer.scala'

[error] at me.winslow.d.mn2gt.MarkersSymbolizerTransformer$.convertMarkersSymbolizer(PointSymbolizers.scala:87)
[error] at me.winslow.d.mn2gt.MarkersSymbolizerTransformer$.transform(PointSymbolizers.scala:132)

line 87 in PointSymbolizer.scala:

      require(Seq(filename, fill, stroke).exists(_ isDefined))

but i don't know how to debug this problem! I have attached the corresponding mapfile.

Can you please have a look whats going wrong here ?!

many thanks,
Wolfgang

Am Dienstag, 5. Februar 2013 15:35:05 UTC+1 schrieb David Winslow:
I believe you are encountering the problem discussed in this bug report: https://github.com/dwinPredef.scalas/mapnik2geotools/issues/37
OSMBright.xml.zip

David Winslow

unread,
Feb 6, 2013, 10:10:12 AM2/6/13
to wolfgang...@googlemail.com, Mapnik to GeoTools Style Conversion
Yes, you're right, I misdiagnosed the problem initially (I got in a hurry and stopped reading at 'requirement failed.)

This snippet: Seq(filename, fill, stroke).exists(_.isDefined) tests whether at least one of the three variables listed is defined (they are all elements from the XML which might or might not be there, but at least one is needed.)  So, somewhere in your XML there is a <MarkerSymbolizer> with no filename, fill, or stroke attribute.

If Mapnik does indeed render styles with such a MarkerSymbolizer, then it is a bug in mn2gt and we should fix it (if you can give me a hint about what MarkerSymbolizer does with no filename, fill, or stroke I can probably make the change quickly.)  Otherwise, something's wrong with your style and I guess you should correct it before conversion.

--
David Winslow


wolfgang...@googlemail.com

unread,
Feb 6, 2013, 11:12:34 AM2/6/13
to mapnik2...@opengeo.org
i have checked the Mapfile , there are a lot of lines looking like these:

<MarkersSymbolizer placement="line" max-error="0.5" spacing="200" file="img/icon/oneway.svg" />

is it ok to fill the line with stroke="#ffffff" to get the correct conversion?

In the resulting sld's are a lot of lines like this:

<Filter xmlns="http://www.opengis.net/ogc"><!--Unparsed filter - ([type] = 'trunk') and ([reflen] = 8) and ([oneway] = -1)--><!--[1.55] failure: string matching regex `\d+' expected but `-' found

([type] = 'trunk') and ([reflen] = 8) and ([oneway] = -1)
                                                      ^--></Filter>

so i guess that a negativ value are not allowed?

Thanks,
Wolfgang

wolfgang...@googlemail.com

unread,
Feb 6, 2013, 12:17:29 PM2/6/13
to mapnik2...@opengeo.org, wolfgang...@googlemail.com
Hi David,

i looked into the tables for Values of the column 'oneway' and there are correct '-1' values inside!

So it should be possible to parse negativ values as well.

Can you have a look on this?

Thanks,
Wolfgang

David Winslow

unread,
Feb 6, 2013, 12:21:47 PM2/6/13
to wolfgang...@googlemail.com, Mapnik to GeoTools Style Conversion
It looks like mapnik2geotools expects 'filename' where your file contains 'file'.  Perhaps this is something that needs to be corrected in mn2gt (maybe a new mapnik version has changed the syntax.)

The parser for filter expressions is defined in Mapnik2GeoTools.scala. I can correct it the next time I look at it, but I probably won't be able to do anything until the weekend.

--
David Winslow
Reply all
Reply to author
Forward
0 new messages