Java errors when running mn2gt conversion

85 views
Skip to first unread message

Nikolay Lebedev

unread,
Mar 20, 2012, 5:34:07 AM3/20/12
to Mapnik to GeoTools Style Conversion, dwin...@opengeo.org
Hi, I'm trying to convert a valid Mapnik XML file and get errors:

> run myosm.xml

Multiple main classes detected, select one to run:

[1] me.winslow.d.mn2gt.Driver
[2] me.winslow.d.mn2gt.GUI

Enter number: 1

[error] java.lang.NullPointerException
[error] at
me.winslow.d.mn2gt.driver.LocalConversion.ensureOutputDirecto
ry(driver.scala:41)
[error] at
me.winslow.d.mn2gt.driver.LocalConversion.run(driver.scala:
15 )
[error] at me.winslow.d.mn2gt.Driver$$anonfun$main
$1.apply(CommandLine.s cala:60)
[error] at me.winslow.d.mn2gt.Driver$$anonfun$main
$1.apply(CommandLine.s cala:59)
[error] at scala.collection.LinearSeqOptimized
$class.foreach(LinearSeqOp timized.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(NativeMethodAcces
sorImpl.java:39)
[error] at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMet
hodAccessorImpl.java:25)
[error] at java.lang.reflect.Method.invoke(Method.java:597)
[error] at scala.tools.nsc.util.ScalaClassLoader$$anonfun$run
$1.apply(Sc alaClassLoader.scala:78)
[error] at scala.tools.nsc.util.ScalaClassLoader
$class.asContext(ScalaCl assLoader.scala:24)
[error] at scala.tools.nsc.util.ScalaClassLoader
$URLClassLoader.asContex t(ScalaClassLoader.scala:
88)
[error] at scala.tools.nsc.util.ScalaClassLoader
$class.run(ScalaClassLoa der.scala:78)
[error] at scala.tools.nsc.util.ScalaClassLoader
$URLClassLoader.run(Scal aClassLoader.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(MainGenericRunn er.scala:56)
[error] at
scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.s
cala:80)
[error] at scala.tools.nsc.MainGenericRunner
$.main(MainGenericRunner.sca la:89)
[error] at
scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scal
a)
java.lang.RuntimeException: Nonzero exit code returned from runner: 1
at scala.sys.package$.error(package.scala:27)
at scala.Predef$.error(Predef.scala:66)
[error] {file:/Users/nl/Work/m2gt/}default-b941db/compile:run:
Nonzero exit code returned from runner: 1
[error] Total time: 4 s, completed Mar 20, 2012 12:26:58 PM


What is the cause?

David Winslow

unread,
Mar 20, 2012, 8:55:11 AM3/20/12
to Nikolay Lebedev, Mapnik to GeoTools Style Conversion
Looks like a path handling bug.  mn2gt tries to find the parent directory of the OSM XML, but with the file you gave ("myosm.xml") there is no parent.  The file handling should check for null in this case and do something appropriate, but for now I think you can work around the issue by just putting a "." in front.

Please try this instead:

> run ./myosm.xml

--
David Winslow

Nikolay Lebedev

unread,
Mar 20, 2012, 9:00:28 AM3/20/12
to Mapnik to GeoTools Style Conversion, dwin...@opengeo.org
David, thanks for the tip.

Now I've got another error
(I guess during the conversion itself)

run ./myosm.xml

Multiple main classes detected, select one to run:

[1] me.winslow.d.mn2gt.Driver
[2] me.winslow.d.mn2gt.GUI

Enter number: 1

[error] java.util.NoSuchElementException: None.get
[error] at scala.None$.get(Option.scala:275)
[error] at scala.None$.get(Option.scala:273)
[error] at me.winslow.d.mn2gt.MarkersSymbolizerTransformer
$.convertMarkersSymbolizer(PointSymbolizers.scala:112)
[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:652)
[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:
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:
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:
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)
at scala.Predef$.error(Predef.scala:66)
[error] {file:/Users/nl/Work/m2gt/}default-b941db/compile:run: Nonzero
exit code returned from runner: 1
[error] Total time: 37 s, completed Mar 20, 2012 3:57:05 PM

Is it a bug?


On 20 мар, 16:55, David Winslow <dwins...@opengeo.org> wrote:
> Looks like a path handling bug.  mn2gt tries to find the parent directory
> of the OSM XML, but with the file you gave ("myosm.xml") there is no
> parent.  The file handling should check for null in this case and do
> something appropriate, but for now I think you can work around the issue by
> just putting a "." in front.
>
> Please try this instead:
>
> > run ./myosm.xml
>
> --
> David Winslow
> OpenGeo -http://opengeo.org/

David Winslow

unread,
Mar 20, 2012, 9:10:50 AM3/20/12
to Nikolay Lebedev, Mapnik to GeoTools Style Conversion
Yes, you have used a Mapnik construct that is not yet supported in Mapnik2Geotools.  If you look at the start of the stack trace:

[error] java.util.NoSuchElementException: None.get
[error]         at scala.None$.get(Option.scala:275)
[error]         at scala.None$.get(Option.scala:273)
[error]         at me.winslow.d.mn2gt.MarkersSymbolizerTransformer
$.convertMarkersSymbolizer(PointSymbolizers.scala:112)
[error]         at me.winslow.d.mn2gt.MarkersSymbolizerTransformer
$.transform(PointSymbolizers.scala:132)
[error]         at scala.xml.transform.BasicTransformer$$anonfun
$1.apply(BasicTransformer.scala:39)

You can see that the error is at line 112 of PointSymbolizers.scala.  Let's take a look:  https://github.com/dwins/mapnik2geotools/blob/master/src/main/scala/me/winslow/d/mn2gt/PointSymbolizers.scala#L112

110 val strokeXml =
111   <Stroke>
112     <CssParameter name="stroke">{stroke.get}</CssParameter>
113     <CssParameter name="stroke-opacity">{strokeOpacity}</CssParameter>
114     <CssParameter name="stroke-width">{strokeWidth}</CssParameter>
115   </Stroke>;

So the error is that you have a MarkersSymbolizer in your style using the default stroke instead of an explicit one.

If you're willing to start hacking, you might be able to fix it by replacing:
112     <CssParameter name="stroke">{stroke.get}</CssParameter>

with the following:
{ if (stroke.isDefined)
     <CssParameter name="stroke">{stroke.get}</CssParameter>
  else
     NodeSeq.empty
}

The braces are necessary to delimit Scala code from inline XML.  If this works for you I would love a pull request :)

--
David Winslow

2012/3/20 Nikolay Lebedev <nleb...@gispro.ru>

David Winslow

unread,
Mar 23, 2012, 9:39:34 AM3/23/12
to Николай Лебедев, Mapnik to GeoTools Style Conversion
GeoTools' autoWrap vendor option is in pixels.  However, I believe Mapnik uses characters.  If I'm mistaken I'm happy to change it though.

--
David Winslow
OpenGeo - http://opengeo.org/

2012/3/20 Николай Лебедев <nleb...@gispro.ru>
Ok, I'll try to investigate on it more and file it.

Meanwhile looking at the generated SLD files, I found that
Mapnik wrap-width TextSymbolizer property isn't mapped to SLD autoWrap vendor option.

Aren't they both measured in pixels?



20 марта 2012 г. 18:22 пользователь David Winslow <dwin...@opengeo.org> написал:

Sorry, I don't think I'll be able to troubleshoot the whole issue this way.  If you post your style online somewhere and file an issue on Github I will try to take a look the next time I am working on MN2GT.  But that may be a while.

--
David Winslow
OpenGeo - http://opengeo.org/

2012/3/20 Николай Лебедев <nleb...@gispro.ru>
Ok. Compiled.

David, sorry to bother you, but there seems to be another bug:


run ./myosm.xml

Multiple main classes detected, select one to run:

 [1] me.winslow.d.mn2gt.Driver
 [2] me.winslow.d.mn2gt.GUI

Enter number: 1

[error] java.util.NoSuchElementException: key not found: port
[error]         at scala.collection.MapLike$class.default(MapLike.scala:224)
[error]         at scala.collection.immutable.HashMap.default(HashMap.scala:36)
[error]         at scala.collection.MapLike$class.apply(MapLike.scala:135)
[error]         at scala.collection.immutable.HashMap.apply(HashMap.scala:36)
[error]         at me.winslow.d.mn2gt.driver.LocalConversion$$anonfun$5.apply(dr        iver.scala:86)
[error]         at me.winslow.d.mn2gt.driver.LocalConversion$$anonfun$5.apply(dr        iver.scala:82)
[error]         at scala.collection.TraversableLike$WithFilter$$anonfun$map$2.ap        ply(TraversableLike.scala:661)

[error]         at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOp        timized.scala:59)
[error]         at scala.collection.immutable.List.foreach(List.scala:45)
[error]         at scala.collection.TraversableLike$WithFilter.map(TraversableLi        ke.scala:660)
[error]         at me.winslow.d.mn2gt.driver.LocalConversion.writeLayers(driver.        scala:82)
[error]         at me.winslow.d.mn2gt.driver.LocalConversion.run(driver.scala:30        )

[error]         at me.winslow.d.mn2gt.Driver$$anonfun$main$1.apply(CommandLine.s        cala:60)
[error]         at me.winslow.d.mn2gt.Driver$$anonfun$main$1.apply(CommandLine.s        cala:59)
[error]         at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOp        timized.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(NativeMethodAcces        sorImpl.java:39)
[error]         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMet        hodAccessorImpl.java:25)
[error]         at java.lang.reflect.Method.invoke(Method.java:597)
[error]         at scala.tools.nsc.util.ScalaClassLoader$$anonfun$run$1.apply(Sc        alaClassLoader.scala:78)
[error]         at scala.tools.nsc.util.ScalaClassLoader$class.asContext(ScalaCl        assLoader.scala:24)
[error]         at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.asContex        t(ScalaClassLoader.scala:88)
[error]         at scala.tools.nsc.util.ScalaClassLoader$class.run(ScalaClassLoa        der.scala:78)
[error]         at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.run(Scal        aClassLoader.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(MainGenericRunn        er.scala:56)
[error]         at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.s        cala:80)
[error]         at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.sca        la:89)
[error]         at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scal        a)

java.lang.RuntimeException: Nonzero exit code returned from runner: 1
        at scala.sys.package$.error(package.scala:27)
        at scala.Predef$.error(Predef.scala:66)
[error] {file:/Users/nextstopsun/Work/m2gt/}default-b941db/compile:run: Nonzero         exit code returned from runner: 1
[error] Total time: 107 s, completed Mar 20, 2012 5:15:03 PM


I think it's a deeper one - something goes wrong with LocalConversion



20 марта 2012 г. 18:05 пользователь David Winslow <dwin...@opengeo.org> написал:

I should have used a capital E: NodeSeq.Empty.  Sorry for the confusion.

--
David Winslow

2012/3/20 Николай Лебедев <nleb...@gispro.ru>
David, I've tried to add this code, but I get a compiler error

[error] /Users/nl/Work/m2gt/src/main/scala/me/winslow/d/mn2gt/PointSymbolizers.scala:115: value empty is not a member of object scala.xml.NodeSeq
[error]                     NodeSeq.empty
[error]                             ^
[error] one error found
[error] {file:/Users/nextstopsun/Work/m2gt/}default-b941db/compile:compile: Compilation failed

Seems like scala thinks "empty" is a property of NodeSeq. Maybe there is another reserved word (like "void") for that?
 


20 марта 2012 г. 17:10 пользователь David Winslow <dwin...@opengeo.org> написал:



--
--
С уважением,
Лебедев Николай
ЗАО "ГИСпроект"
тел.: 8 (495) 981-60-66
факс: 8 (495) 981-60-66
моб.: 8 (903) 720-23-37
e-mail: nleb...@gispro.ru
www.gispro.ru




--
--
С уважением,
Лебедев Николай
ЗАО "ГИСпроект"
тел.: 8 (495) 981-60-66
факс: 8 (495) 981-60-66
моб.: 8 (903) 720-23-37
e-mail: nleb...@gispro.ru
www.gispro.ru




--
--
С уважением,
Лебедев Николай
ЗАО "ГИСпроект"
тел.: 8 (495) 981-60-66
факс: 8 (495) 981-60-66
моб.: 8 (903) 720-23-37
e-mail: nleb...@gispro.ru
www.gispro.ru

Reply all
Reply to author
Forward
0 new messages