<HTML dir=ltr><HEAD><TITLE>Re: [Gvsig_english] Code Question - raster layers</TITLE>
<META http-equiv=Content-Type content="text/html; charset=unicode">
<META content="MSHTML 6.00.6000.16890" name=GENERATOR></HEAD>
<BODY>
<DIV id=idOWAReplyText21901 dir=ltr>
<DIV dir=ltr><FONT face="Times New Roman" color=#000000 size=3>Hello, Aldo:</FONT></DIV>
<DIV dir=ltr>&nbsp;</DIV>
<DIV dir=ltr>Yes, you should pay for the J9 license if you are going to use it in a commercial application.</DIV>
<DIV dir=ltr>&nbsp;</DIV>
<DIV dir=ltr><FONT face="Times New Roman" color=#000000 size=3>In the OpenStreetMap tiles, the north is always the upper margin, so there should be no need to rotate an image composed with those tiles.</FONT></DIV>
<DIV dir=ltr>&nbsp;</DIV>
<DIV dir=ltr><FONT face="Times New Roman" color=#000000 size=3>If you use those tiles, changing the projection to EPSG:4326 causes the labels to become almost unreadable. I would use EPSG:32633 which is also known by gvSIG Mobile.</FONT></DIV>
<DIV dir=ltr>&nbsp;</DIV>
<DIV dir=ltr><FONT face="Times New Roman" color=#000000 size=3>I suggest to do the following:</FONT></DIV>
<DIV dir=ltr>&nbsp;</DIV>
<DIV dir=ltr><FONT face="Times New Roman" color=#000000 size=3>- Download several OSM tiles.</FONT></DIV>
<DIV dir=ltr><FONT face="Times New Roman" color=#000000 size=3>- Merge all the tiles in one image and compute the mercator coordinates of the top-left corner and the pixel width.</FONT></DIV>
<DIV dir=ltr><FONT face="Times New Roman" color=#000000 size=3>- Write the WLD file and reproject the resulting image to EPSG:4326 or EPSG:32633, then convert it to the ECW format, so you can use in gvSIG Mobile.</FONT></DIV>
<DIV dir=ltr>&nbsp;</DIV>
<DIV dir=ltr><FONT face="Times New Roman" color=#000000 size=3>I have done this with the city of Catania. You can download its OSM map (z = 15) in ECW format (EPSG:4326 and EPSG:32633) from this link:</FONT></DIV>
<DIV dir=ltr>&nbsp;</DIV>
<DIV dir=ltr><FONT face="Times New Roman" color=#000000 size=3><A href="http://www.prodevelop.es/files/fm/public/downloads/documents/catania_osm_ecw.zip">http://www.prodevelop.es/files/fm/public/downloads/documents/catania_osm_ecw.zip</A></FONT></DIV>
<DIV dir=ltr>&nbsp;</DIV>
<DIV dir=ltr><FONT face="Times New Roman" color=#000000 size=3>You could also add support for the projection used by OSM so you don't need to reproject the tiles. This would be very easy because the formulas are already implemented in the code, you only need to use them.</FONT></DIV>
<DIV dir=ltr>&nbsp;</DIV>
<DIV dir=ltr><FONT face="Times New Roman" color=#000000 size=3></FONT>&nbsp;</DIV>
<DIV dir=ltr><FONT face="Times New Roman" color=#000000 size=3>Regards,</FONT></DIV>
<DIV dir=ltr><FONT face="Times New Roman" color=#000000 size=3></FONT>&nbsp;</DIV></DIV>
<DIV id=idSignature70880 dir=ltr>
<DIV><FONT face="Courier New" size=2><FONT face="Times New Roman" size=3>Juan Lucas Domínguez Rubio<BR></FONT>---</FONT></DIV>
<DIV><FONT face="Courier New" size=2>Prodevelop SL, Valencia (España)</FONT></DIV>
<DIV><FONT face="Courier New" size=2>0° 22' 49.62" W, 39° 28' 25.45" N<BR>Tlf.: 96.351.06.12 -- Fax: 96.351.09.68<BR></FONT><A href="http://www.prodevelop.es/"><FONT face="Courier New" size=2>http://www.prodevelop.es</FONT></A><BR><FONT face="Courier New" size=2>---</FONT></DIV></DIV>
<DIV dir=ltr><BR>
<HR tabIndex=-1>
<FONT face=Tahoma size=2><B>De:</B> gvsig_internacional-bounces@listserv.gva.es en nombre de Aldo Stracquadanio<BR><B>Enviado el:</B> jue 17/09/2009 9:24<BR><B>Para:</B> Users and Developers mailing list<BR><B>Asunto:</B> Re: [Gvsig_english] Code Question - raster layers<BR></FONT><BR></DIV>
<DIV>
<P><FONT size=2>Thank you for these advices,<BR><BR>I will try to put them in practice soon; just for completeness I'm<BR>sending you the gvm project that is causing me troubles. If I'll write<BR>some code to deal with transforms of jpg/gif/png images I'll send it<BR>too. However I don't think I will be able to use IBM J9 in production<BR>environment, since if I'm not wrong it should be protected by licences<BR>and we should pay to use it in a commercial application.<BR><BR>Regards,<BR>Aldo Stracquadanio.<BR><BR>2009/9/16 Juan Lucas Dominguez Rubio &lt;jldominguez@prodevelop.es&gt;:<BR>&gt; Hello, Aldo.<BR>&gt;<BR>&gt; Yes, we know that the VM sometimes (I think J9 doesn't) uses a new thread<BR>&gt; when dealing with images (reading or resampling), that's why we wrote this<BR>&gt; method:<BR>&gt;<BR>&gt; public static Image getScaled(Image img, int newwidth, int newheight);<BR>&gt;<BR>&gt; in the ResourceReader class, but I think we forgot to use it in the draw<BR>&gt; method of the WKFRasterDriver class :-/<BR>&gt;<BR>&gt; So I think you have these three options:<BR>&gt;<BR>&gt; - Use the J9 version (as I said, I think J9 loads/resamples images in the<BR>&gt; main thread)<BR>&gt; - Edit the code, use that method and compile<BR>&gt; - Convert your JPG/PNG/GIF images to ECW with Gdal (<BR>&gt; <A href="http://fwtools.maptools.org/">http://fwtools.maptools.org</A> )<BR>&gt;<BR>&gt; Even if you use J9 or fix the bug yourself, I recommend using ECW because<BR>&gt; the other formats are a great bother. After loading one of those images, the<BR>&gt; application becomes more unstable.<BR>&gt;<BR>&gt; Thanks for reporting this problem.<BR>&gt;<BR>&gt; As for the rotation, we simply ignore it. The second and third parameters of<BR>&gt; the world file (*.WLD) are not used at all, sorry. Again, with Gdal you can<BR>&gt; convert a rotated image (PNG/JPG/GIF + WLD file with non-zero values in<BR>&gt; second and third line) into a ECW file which will obviously have black<BR>&gt; triangles by the margins. In this case, you need two steps:<BR>&gt;<BR>&gt; gdalwarp image.jpg image.tif<BR>&gt; gdal_translate -of ecw image.tif image.ecw<BR>&gt;<BR>&gt;<BR>&gt;<BR>&gt; Regards,<BR>&gt;<BR>&gt; Juan Lucas Domínguez Rubio<BR>&gt; ---<BR>&gt; Prodevelop SL, Valencia (España)<BR>&gt; 0° 22' 49.62" W, 39° 28' 25.45" N<BR>&gt; Tlf.: 96.351.06.12 -- Fax: 96.351.09.68<BR>&gt; <A href="http://www.prodevelop.es/">http://www.prodevelop.es</A><BR>&gt; ---<BR>&gt; ________________________________<BR>&gt; De: gvsig_internacional-bounces@listserv.gva.es en nombre de Aldo<BR>&gt; Stracquadanio<BR>&gt; Enviado el: mié 16/09/2009 13:00<BR>&gt; Para: Users and Developers mailing list<BR>&gt; Asunto: Re: [Gvsig_english] Code Question - raster layers<BR>&gt;<BR>&gt; Hi Juan,<BR>&gt;<BR>&gt; I know about the limitation of 400k pixels, I will send you the<BR>&gt; exported project I'm working on as soon as I will be in my office. The<BR>&gt; problem with resampling of the image is that a<BR>&gt; clipping-translating-composition can't resolve the rotation part of a<BR>&gt; generic affine transform (and I think in my image it's needed a little<BR>&gt; rotation too).<BR>&gt;<BR>&gt; Moreover I see that you use the getScaledInstance method to get a<BR>&gt; scaled instance of the image and immediatly after this you check for<BR>&gt; width. This often gives me -1 (causing an exception) because this<BR>&gt; method (like the most of the graphics methods of CDC) can exibit an<BR>&gt; asynchronus behavior; have you ever had such problems?<BR>&gt;<BR>&gt; Regards,<BR>&gt; Aldo Stracquadanio.<BR>&gt;<BR>&gt; 2009/9/15 Juan Lucas Dominguez Rubio &lt;jldominguez@prodevelop.es&gt;:<BR>&gt;&gt; Hello, Aldo.<BR>&gt;&gt;<BR>&gt;&gt; As you say, the Graphics2D class in CDC knows nothing about affine<BR>&gt;&gt; transforms, so you always have to provide 'final' coordinates, that is,<BR>&gt;&gt; screen coordinates.<BR>&gt;&gt;<BR>&gt;&gt; The Image class has a resample method and of course there are ways to clip<BR>&gt;&gt; an image, so all you have to do is clipping and resizing the image until<BR>&gt;&gt; you<BR>&gt;&gt; have the final image, and then paste it in the correct coordinates on the<BR>&gt;&gt; screen, that's what the WKRasterDriver does.<BR>&gt;&gt;<BR>&gt;&gt; These images (we're talking about JPG, PNG and GIF images; the ECW driver<BR>&gt;&gt; is<BR>&gt;&gt; totally different) are very memory-consuming and can only be loaded if the<BR>&gt;&gt; have less than 400,000 pixels. If we tried to open larger images, the<BR>&gt;&gt; virtual machine itself would be at risk.<BR>&gt;&gt;<BR>&gt;&gt; We tried to do the clipping and resampling in such a way that we never<BR>&gt;&gt; need<BR>&gt;&gt; to instantiate a large image, but maybe this is not always possible.<BR>&gt;&gt;<BR>&gt;&gt; Can you send us the log files under \gvSIGMobile\log\ or even the image<BR>&gt;&gt; itself?<BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt;&gt; Regards,<BR>&gt;&gt; Juan Lucas Domínguez Rubio<BR>&gt;&gt; ---<BR>&gt;&gt; Prodevelop SL, Valencia (España)<BR>&gt;&gt; 0° 22' 49.62" W, 39° 28' 25.45" N<BR>&gt;&gt; Tlf.: 96.351.06.12 -- Fax: 96.351.09.68<BR>&gt;&gt; <A href="http://www.prodevelop.es/">http://www.prodevelop.es</A><BR>&gt;&gt; ---<BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt;&gt; -----Mensaje original-----<BR>&gt;&gt; De: gvsig_internacional-bounces@listserv.gva.es en nombre de Aldo<BR>&gt;&gt; Stracquadanio<BR>&gt;&gt; Enviado el: mar 15/09/2009 18:32<BR>&gt;&gt; Para: gvsig_internacional@listserv.gva.es<BR>&gt;&gt; Asunto: [Gvsig_english] Code Question - raster layers<BR>&gt;&gt;<BR>&gt;&gt; Hi everybody,<BR>&gt;&gt;<BR>&gt;&gt; I'm reading the phoneME Mobile source code, but I can't understand<BR>&gt;&gt; something about the WKFRasterDriver: if there is no support for<BR>&gt;&gt; AffineTransform in CDC, how do you obtain a "shear" effect using only<BR>&gt;&gt; scaling-translation operations? I can't figure it out and, as well,<BR>&gt;&gt; the raster layer visualization is not working at all on my<BR>&gt;&gt; installation: in my opinion there is some problem with the asynchronus<BR>&gt;&gt; behaviour of the Image.getScaledInstance method since I get a "Cannot<BR>&gt;&gt; resample (down)".<BR>&gt;&gt;<BR>&gt;&gt; Can someone help me understanding?<BR>&gt;&gt; Thank's all, Aldo Stracquadanio.<BR>&gt;&gt; _______________________________________________<BR>&gt;&gt; Gvsig_internacional mailing list<BR>&gt;&gt; Gvsig_internacional@listserv.gva.es<BR>&gt;&gt; <A href="http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_internacional">http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_internacional</A><BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt;&gt; _______________________________________________<BR>&gt;&gt; Gvsig_internacional mailing list<BR>&gt;&gt; Gvsig_internacional@listserv.gva.es<BR>&gt;&gt; <A href="http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_internacional">http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_internacional</A><BR>&gt;&gt;<BR>&gt;&gt;<BR>&gt; _______________________________________________<BR>&gt; Gvsig_internacional mailing list<BR>&gt; Gvsig_internacional@listserv.gva.es<BR>&gt; <A href="http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_internacional">http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_internacional</A><BR>&gt;<BR>&gt; _______________________________________________<BR>&gt; Gvsig_internacional mailing list<BR>&gt; Gvsig_internacional@listserv.gva.es<BR>&gt; <A href="http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_internacional">http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_internacional</A><BR>&gt;<BR>&gt;<BR></FONT></P></DIV></BODY></HTML>