Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 25/04/2014, à 20:57

yodaanneaux

Executer un script java sur Ubuntu

Bonjour,

je souhaiterais exécuter ce script, obtenu depuis le lien suivant :

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import javax.imageio.*;
import javax.swing.*;

public class LoadImageApp extends JFrame {
    private static final boolean DEBUG = false;
    private static BufferedImage image ;
    private JButton btnplus, btnmoins, btwplus, btwmoins, btsplus, btsmoins, bteplus, btemoins ;
    private    final short  hauteurtuile = 256 ;
    private    final short  largeurtuile = 256 ; 
    private int iranghaute, irangbasse, icolgauche, icoldroite ;  
    private    JScrollPane pancarte ;                                           // panneau image
    private    ImageIcon    imcarte = new ImageIcon ();
    private int rwidth, rheight ;                                               // taille JFrame
    private int swidth, sheight ;

    public LoadImageApp (String nomfichier, String rangsup, String colgauche, String ranginf, String coldroite) {
        super ("Géoportail crawler V0.9") ;
        final File outputfile = new File(nomfichier);
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); // get the screen size as a java dimension
        sheight = screenSize.height * 3 / 4 ;                 // get 3/4 of the height, and 3/4. of the width
        swidth = screenSize.width * 3 / 4 ;
        final String filetype = nomfichier.substring(nomfichier.lastIndexOf(".") + 1) ;
        addWindowListener(new WindowAdapter(){
                public void windowClosing(WindowEvent e) {
                    try { // retrieve image
                        ImageIO.write(image, (filetype.equals("*.jpg,*.JPG") || filetype.equals("*.png,*.PNG") || filetype.equals("*.gif,*.GIF") || filetype.equals("*.jpeg,*.JPEG") || filetype.equals("*.bmp,*.BMP")) ? ".jpg" : filetype, outputfile);
                    } catch (IOException ew) {
                        ew.printStackTrace();	 
                    }
                    System.exit(0);
                }
            });
        iranghaute = Integer.parseInt(rangsup) ; irangbasse = Integer.parseInt(ranginf) ;
        icolgauche =Integer.parseInt(colgauche) ; icoldroite =Integer.parseInt(coldroite) ;
        rwidth = Math.min(swidth, largeurtuile * (icoldroite - icolgauche + 1)) ;
        rheight = Math.min(sheight, hauteurtuile * (irangbasse - iranghaute + 1)) ;
        if (DEBUG) System.out.println( "*** DEBUG *** LoadImageApp,swidth="+swidth +", sheight="+sheight+", rwidth="+rwidth+", rheight="+rheight);
        Construimage ( ) ;
        setPreferredSize(new Dimension(rwidth, rheight)); setLocation (50,50) ;
        pancarte = new JScrollPane(new JLabel(imcarte)) ;
        getContentPane().add(pancarte, BorderLayout.CENTER ) ;
        Ecouteurbtn ec = new Ecouteurbtn () ;
        JPanel Panboun = new JPanel () ;
        btnplus = new JButton ("+") ; btnplus.setPreferredSize(new Dimension(rwidth/5,15)); btnplus.addActionListener(ec); Panboun.add(btnplus) ;
        btnmoins = new JButton ("-") ; btnmoins.setPreferredSize(new Dimension(rwidth/5,15)); btnmoins.addActionListener(ec); Panboun.add(btnmoins) ;
        getContentPane().add(Panboun, BorderLayout.NORTH ) ;
        JPanel Panbouw = new JPanel () ;  Panbouw.setLayout(new BoxLayout(Panbouw, BoxLayout.Y_AXIS) );
        btwmoins = new JButton () ; Verticalize (btwmoins, "-", false) ; btwmoins.setPreferredSize(new Dimension(15,rheight/5)); btwmoins.addActionListener(ec); Panbouw.add(btwmoins) ;
        btwplus = new JButton () ; Verticalize (btwplus, "+", false) ; btwplus.setPreferredSize(new Dimension(15,rheight/5)); btwplus.addActionListener(ec); Panbouw.add(btwplus) ;
        getContentPane().add(Panbouw, BorderLayout.WEST ) ;
        JPanel Panbous = new JPanel () ;
        btsmoins = new JButton ("-") ; btsmoins.setPreferredSize(new Dimension(rwidth/5,15)); btsmoins.addActionListener(ec); Panbous.add(btsmoins) ;
        btsplus = new JButton ("+") ; btsplus.setPreferredSize(new Dimension(rwidth/5,15)); btsplus.addActionListener(ec); Panbous.add(btsplus) ;
        getContentPane().add(Panbous, BorderLayout.SOUTH ) ;
        JPanel Panboue = new JPanel () ;  Panboue.setLayout(new BoxLayout(Panboue, BoxLayout.Y_AXIS) );
        bteplus = new JButton () ; Verticalize (bteplus, "+", true) ; bteplus.setPreferredSize(new Dimension(15,rheight/5)); bteplus.addActionListener(ec); Panboue.add(bteplus) ;
        btemoins = new JButton () ; Verticalize (btemoins, "-", true) ; btemoins.setPreferredSize(new Dimension(15,rheight/5)); btemoins.addActionListener(ec); Panboue.add(btemoins) ;
        if (icolgauche == icoldroite) { btwmoins.setVisible(false); btemoins.setVisible(false); }
        if (iranghaute == irangbasse) { btnmoins.setVisible(false); btsmoins.setVisible(false); }
        getContentPane().add(Panboue, BorderLayout.EAST ) ; 
        pack() ;
        setVisible(true) ;
    }
    public class Ecouteurbtn implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            Object source = e.getSource();
            if(source == btnplus)                iranghaute--;          
            else if(source == btnmoins)                iranghaute++; 
            else if(source == btwplus)                icolgauche--;          
            else if(source == btwmoins)                icolgauche++; 
            else if(source == btsplus)                irangbasse++;          
            else if(source == btsmoins)                irangbasse--; 
            else if(source == bteplus)                icoldroite++;          
            else if(source == btemoins)                icoldroite--; 
            Construimage ( ) ;
            if (icolgauche == icoldroite) { btwmoins.setVisible(false); btemoins.setVisible(false); }
            else { btwmoins.setVisible(true); btemoins.setVisible(true); }
            if (iranghaute == irangbasse) { btnmoins.setVisible(false); btsmoins.setVisible(false); }
            else { btnmoins.setVisible(true); btsmoins.setVisible(true); }
            pancarte.repaint();
            pack() ;
        }     
    }
     static void Verticalize (JButton btn, String caption, boolean clockwise) {
         Font f = btn.getFont ();
        FontMetrics fm = btn.getFontMetrics (f);
        int captionHeight = fm.getHeight ();
        int captionWidth = fm.stringWidth (caption);
        BufferedImage bi = new BufferedImage (captionHeight + 4,
                captionWidth + 4, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = (Graphics2D) bi.getGraphics ();
        
        g.setColor (new Color (0, 0, 0, 0)); // transparent
        g.fillRect (0, 0, bi.getWidth (), bi.getHeight ());
        
        g.setColor (btn.getForeground ());
        g.setFont (f);
        g.setRenderingHint (RenderingHints.KEY_TEXT_ANTIALIASING,
                RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        
        if (clockwise) {
            g.rotate (Math.PI / 2);
        } else {
            g.rotate (- Math.PI / 2);
            g.translate (-bi.getHeight (), bi.getWidth ());
        }
        g.drawString (caption, 2, -6);
        
        Icon icon = new ImageIcon (bi);
        btn.setIcon (icon);
        
        btn.setMargin (new Insets (15, 2, 15, 2));
        btn.setActionCommand (caption);   
    }
  
    private void Construimage () {
        if (DEBUG) System.out.println( "*** DEBUG *** Construimage, irangbasse="+irangbasse+", iranghaute="+iranghaute+", icoldroite="+icoldroite+", icolgauche="+icolgauche);
        image = new BufferedImage (largeurtuile * (icoldroite - icolgauche + 1), hauteurtuile * (irangbasse - iranghaute + 1), BufferedImage.TYPE_INT_RGB) ;
        if (DEBUG) System.out.println( "*** DEBUG *** Construimage, largeur image="+image.getWidth()+", hauteur d'image="+image.getHeight());
        Graphics g = image.getGraphics();
        BufferedImage tuile = null ;
           for (int r = iranghaute; r <= irangbasse ; r++)   // pour chaque rangée
            for (int c = icolgauche ; c <= icoldroite ; c++) {  // pour chaque colonne
                try {	 
                    URL urlImage = new URL("http://gpp3-wxs.ign.fr/..."+ String.valueOf(r) + "&TILECOL=" + String.valueOf(c) + "&extParamId=aHR0cDovL3d3dy5nZW9wb3J0YWlsLmdvdXYuZnIvYWNjdWVpbA==");	 
                    InputStream in = urlImage.openStream();
                    tuile = ImageIO.read(in);
                    tuile.addTileObserver(null) ;
                    in.close();	 
                } catch (MalformedURLException e) {	 
                    e.printStackTrace();	 
                } catch (IOException e) {        	 
                    e.printStackTrace();	 
                }            
                g.drawImage(tuile, largeurtuile * (c - icolgauche), hauteurtuile * (r - iranghaute), null);
            }                                                                   // pour chaque colonne
        imcarte.setImage(image) ;
        if (DEBUG) System.out.println( "*** DEBUG *** Construimage, largeur imageIcon="+imcarte.getIconWidth()+", hauteur d'imageIcon="+imcarte.getIconHeight());
}                                                                               //   Construimage                                                           
    
    public static void main(String[] args) {                                    // méthode principale
        /**

    args[0] : nom du fichier image en sortie
    args[1] : numéro de rangée supérieure
    args[2] : numéro de colonne gauche
    args[3] : numéro de rangée inférieure
    args[4] : numéro de colonne droite
    /


        final String[] brgs = args ;
        if (DEBUG) System.out.println( "*** DEBUG *** main, brgs[0] = "+brgs[0]+", brgs[1]="+brgs[1]+", brgs[2]="+brgs[2]+", brgs[3]="+brgs[3]+", brgs[4]="+brgs[4]);
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new LoadImageApp (brgs[0], brgs[1], brgs[2], brgs[3], brgs[4]) ;
            }
        });        
    }                                                                           // méthode principale
}

http://codes-sources.commentcamarche.ne … l-de-l-ign

Je ne suis pas codeur dans l'âme, c'est pourquoi je vous demande votre aide. Quelle est la marche à suivre pour que ce script s'exécute?

J'ai fouillé sur internet, mais les explications sont trop compliquées pour moi!

Heureusement que la communauté est là wink

yodaanneaux

Hors ligne

#2 Le 25/04/2014, à 21:41

Gaara

Re : Executer un script java sur Ubuntu

Salut, je pose une petite pierre, car je ne connait pas java. Voici ce que j'ai fait:
1) copier le script dans un fichier nommé LoadImageApp.java
2) lancer avec javac dans le terminal la ligne d'exemple qu'ils disent:

javac LoadImageApp.java plainfaing.png 11365 17020 11368 17023
javac: invalid flag: 11365
Usage: javac <options> <source files>
use -help for a list of possible options

Donc je fais

javac LoadImageApp.java -help
Usage: javac <options> <source files>
where possible options include:
  -g                         Generate all debugging info
  -g:none                    Generate no debugging info
  -g:{lines,vars,source}     Generate only some debugging info
  -nowarn                    Generate no warnings
  -verbose                   Output messages about what the compiler is doing
  -deprecation               Output source locations where deprecated APIs are used
  -classpath <path>          Specify where to find user class files and annotation processors
  -cp <path>                 Specify where to find user class files and annotation processors
  -sourcepath <path>         Specify where to find input source files
  -bootclasspath <path>      Override location of bootstrap class files
  -extdirs <dirs>            Override location of installed extensions
  -endorseddirs <dirs>       Override location of endorsed standards path
  -proc:{none,only}          Control whether annotation processing and/or compilation is done.
  -processor <class1>[,<class2>,<class3>...] Names of the annotation processors to run; bypasses default discovery process
  -processorpath <path>      Specify where to find annotation processors
  -parameters                Generate metadata for reflection on method parameters
  -d <directory>             Specify where to place generated class files
  -s <directory>             Specify where to place generated source files
  -h <directory>             Specify where to place generated native header files
  -implicit:{none,class}     Specify whether or not to generate class files for implicitly referenced files
  -encoding <encoding>       Specify character encoding used by source files
  -source <release>          Provide source compatibility with specified release
  -target <release>          Generate class files for specific VM version
  -profile <profile>         Check that API used is available in the specified profile
  -version                   Version information
  -help                      Print a synopsis of standard options
  -Akey[=value]              Options to pass to annotation processors
  -X                         Print a synopsis of nonstandard options
  -J<flag>                   Pass <flag> directly to the runtime system
  -Werror                    Terminate compilation if warnings occur
  @<filename>                Read options and filenames from file

LoadImageApp.java:148: error: unclosed comment
        /**
        ^
LoadImageApp.java:167: error: reached end of file while parsing
2 errors

Il y a deux erreurs dans le code, mais je ne sais pas les corriger. (le commentaire n'est pas fermé, oui, mais comment le fermer?)

Dernière modification par gaara92 (Le 25/04/2014, à 21:42)


Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid

                                        <code>zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?"</code>

Hors ligne

#3 Le 25/04/2014, à 22:44

yodaanneaux

Re : Executer un script java sur Ubuntu

Merci de m'aider!

J'ai fait ce que tu m'as dit et j'ai exactement le même résultat. J'ai essayé avec d'autre TILEROW et TILECOL, mais j'ai toujours des invalid flag. Je me demande si l'erreur n'est pas lié au fait que les cartes ne sont pas aux 1:25000 mais au 1:27084. Je n'ai pas trouvé comment imposer une échelle. C'est peut-être même impossible.

Mais on progresse, c'est déjà bien!

Hors ligne

#4 Le 25/04/2014, à 22:52

pires57

Re : Executer un script java sur Ubuntu

tu le fermes avec */ mais j'aimerais savoir si c'est toi qui a fait ce code? parce qu'il est vraiment mais vraiment moche


Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn

Hors ligne

#5 Le 25/04/2014, à 23:08

yodaanneaux

Re : Executer un script java sur Ubuntu

Non ce n'est pas moi, je l'ai trouvé sur le net. Je ne suis pas codeur du tout sad

Quand tu dis fermer le code, tu veux dire à la fin écrire ça ? :

  final String[] brgs = args ;
        if (DEBUG) System.out.println( "*** DEBUG *** main, brgs[0] = "+brgs[0]+", brgs[1]="+brgs[1]+", brgs[2]="+brgs[2]+", brgs[3]="+brgs[3]+", brgs[4]="+brgs[4]);
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new LoadImageApp (brgs[0], brgs[1], brgs[2], brgs[3], brgs[4]) ;
            }
        });        
    }                                                                           // méthode principale
}
*/

Hors ligne

#6 Le 25/04/2014, à 23:17

pires57

Re : Executer un script java sur Ubuntu

non pas ici mais pour une question que j'ignore encore ton code me lève une belle foule d'exception:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0
	at LoadImageApp$2.run(LoadImageApp.java:166)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$200(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Que veut tu faire avec ce code?

Dernière modification par pires57 (Le 25/04/2014, à 23:17)


Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn

Hors ligne

#7 Le 25/04/2014, à 23:29

yodaanneaux

Re : Executer un script java sur Ubuntu

Ce script permet de récupérer les cartes de la visionneuse de geoportail et de les assembler, beaucoup plus rapidement qu'en faisant des impressions écrans et de les assembler à la main.

Hors ligne

#8 Le 26/04/2014, à 14:55

pires57

Re : Executer un script java sur Ubuntu

J'ai pas abandonner ton truc, j'essayerais de jeter un coup d’œil ce soir


Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn

Hors ligne

#9 Le 28/04/2014, à 09:19

yodaanneaux

Re : Executer un script java sur Ubuntu

C'est super cool merci!

Hors ligne

#10 Le 28/04/2014, à 10:03

pires57

Re : Executer un script java sur Ubuntu

j'ai regarder le script, je ne l'avais pas remarqué mais il attend des paramètres lors de la compilation

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import javax.imageio.*;
import javax.swing.*;

public class LoadImageApp extends JFrame {
    private static final boolean DEBUG = false;
    private static BufferedImage image ;
    private JButton btnplus, btnmoins, btwplus, btwmoins, btsplus, btsmoins, bteplus, btemoins ;
    private    final short  hauteurtuile = 256 ;
    private    final short  largeurtuile = 256 ; 
    private int iranghaute, irangbasse, icolgauche, icoldroite ;  
    private    JScrollPane pancarte ;                                           // panneau image
    private    ImageIcon    imcarte = new ImageIcon ();
    private int rwidth, rheight ;                                               // taille JFrame
    private int swidth, sheight ;

    public LoadImageApp (String nomfichier, String rangsup, String colgauche, String ranginf, String coldroite) {
        super ("Géoportail crawler V0.9") ;
        final File outputfile = new File(nomfichier);
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); // get the screen size as a java dimension
        sheight = screenSize.height * 3 / 4 ;                 // get 3/4 of the height, and 3/4. of the width
        swidth = screenSize.width * 3 / 4 ;
        final String filetype = nomfichier.substring(nomfichier.lastIndexOf(".") + 1) ;
        addWindowListener(new WindowAdapter(){
                public void windowClosing(WindowEvent e) {
                    try { // retrieve image
                        ImageIO.write(image, (filetype.equals("*.jpg,*.JPG") || filetype.equals("*.png,*.PNG") || filetype.equals("*.gif,*.GIF") || filetype.equals("*.jpeg,*.JPEG") || filetype.equals("*.bmp,*.BMP")) ? ".jpg" : filetype, outputfile);
                    } catch (IOException ew) {
                        ew.printStackTrace();	 
                    }
                    System.exit(0);
                }
            });
        iranghaute = Integer.parseInt(rangsup) ; irangbasse = Integer.parseInt(ranginf) ;
        icolgauche =Integer.parseInt(colgauche) ; icoldroite =Integer.parseInt(coldroite) ;
        rwidth = Math.min(swidth, largeurtuile * (icoldroite - icolgauche + 1)) ;
        rheight = Math.min(sheight, hauteurtuile * (irangbasse - iranghaute + 1)) ;
        if (DEBUG) System.out.println( "*** DEBUG *** LoadImageApp,swidth="+swidth +", sheight="+sheight+", rwidth="+rwidth+", rheight="+rheight);
        Construimage ( ) ;
        setPreferredSize(new Dimension(rwidth, rheight)); setLocation (50,50) ;
        pancarte = new JScrollPane(new JLabel(imcarte)) ;
        getContentPane().add(pancarte, BorderLayout.CENTER ) ;
        Ecouteurbtn ec = new Ecouteurbtn () ;
        JPanel Panboun = new JPanel () ;
        btnplus = new JButton ("+") ; btnplus.setPreferredSize(new Dimension(rwidth/5,15)); btnplus.addActionListener(ec); Panboun.add(btnplus) ;
        btnmoins = new JButton ("-") ; btnmoins.setPreferredSize(new Dimension(rwidth/5,15)); btnmoins.addActionListener(ec); Panboun.add(btnmoins) ;
        getContentPane().add(Panboun, BorderLayout.NORTH ) ;
        JPanel Panbouw = new JPanel () ;  Panbouw.setLayout(new BoxLayout(Panbouw, BoxLayout.Y_AXIS) );
        btwmoins = new JButton () ; Verticalize (btwmoins, "-", false) ; btwmoins.setPreferredSize(new Dimension(15,rheight/5)); btwmoins.addActionListener(ec); Panbouw.add(btwmoins) ;
        btwplus = new JButton () ; Verticalize (btwplus, "+", false) ; btwplus.setPreferredSize(new Dimension(15,rheight/5)); btwplus.addActionListener(ec); Panbouw.add(btwplus) ;
        getContentPane().add(Panbouw, BorderLayout.WEST ) ;
        JPanel Panbous = new JPanel () ;
        btsmoins = new JButton ("-") ; btsmoins.setPreferredSize(new Dimension(rwidth/5,15)); btsmoins.addActionListener(ec); Panbous.add(btsmoins) ;
        btsplus = new JButton ("+") ; btsplus.setPreferredSize(new Dimension(rwidth/5,15)); btsplus.addActionListener(ec); Panbous.add(btsplus) ;
        getContentPane().add(Panbous, BorderLayout.SOUTH ) ;
        JPanel Panboue = new JPanel () ;  Panboue.setLayout(new BoxLayout(Panboue, BoxLayout.Y_AXIS) );
        bteplus = new JButton () ; Verticalize (bteplus, "+", true) ; bteplus.setPreferredSize(new Dimension(15,rheight/5)); bteplus.addActionListener(ec); Panboue.add(bteplus) ;
        btemoins = new JButton () ; Verticalize (btemoins, "-", true) ; btemoins.setPreferredSize(new Dimension(15,rheight/5)); btemoins.addActionListener(ec); Panboue.add(btemoins) ;
        if (icolgauche == icoldroite) { btwmoins.setVisible(false); btemoins.setVisible(false); }
        if (iranghaute == irangbasse) { btnmoins.setVisible(false); btsmoins.setVisible(false); }
        getContentPane().add(Panboue, BorderLayout.EAST ) ; 
        pack() ;
        setVisible(true) ;
    }
    public class Ecouteurbtn implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            Object source = e.getSource();
            if(source == btnplus)                iranghaute--;          
            else if(source == btnmoins)                iranghaute++; 
            else if(source == btwplus)                icolgauche--;          
            else if(source == btwmoins)                icolgauche++; 
            else if(source == btsplus)                irangbasse++;          
            else if(source == btsmoins)                irangbasse--; 
            else if(source == bteplus)                icoldroite++;          
            else if(source == btemoins)                icoldroite--; 
            Construimage ( ) ;
            if (icolgauche == icoldroite) { btwmoins.setVisible(false); btemoins.setVisible(false); }
            else { btwmoins.setVisible(true); btemoins.setVisible(true); }
            if (iranghaute == irangbasse) { btnmoins.setVisible(false); btsmoins.setVisible(false); }
            else { btnmoins.setVisible(true); btsmoins.setVisible(true); }
            pancarte.repaint();
            pack() ;
        }     
    }
     static void Verticalize (JButton btn, String caption, boolean clockwise) {
         Font f = btn.getFont ();
        FontMetrics fm = btn.getFontMetrics (f);
        int captionHeight = fm.getHeight ();
        int captionWidth = fm.stringWidth (caption);
        BufferedImage bi = new BufferedImage (captionHeight + 4,
                captionWidth + 4, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = (Graphics2D) bi.getGraphics ();
        
        g.setColor (new Color (0, 0, 0, 0)); // transparent
        g.fillRect (0, 0, bi.getWidth (), bi.getHeight ());
        
        g.setColor (btn.getForeground ());
        g.setFont (f);
        g.setRenderingHint (RenderingHints.KEY_TEXT_ANTIALIASING,
                RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        
        if (clockwise) {
            g.rotate (Math.PI / 2);
        } else {
            g.rotate (- Math.PI / 2);
            g.translate (-bi.getHeight (), bi.getWidth ());
        }
        g.drawString (caption, 2, -6);
        
        Icon icon = new ImageIcon (bi);
        btn.setIcon (icon);
        
        btn.setMargin (new Insets (15, 2, 15, 2));
        btn.setActionCommand (caption);   
    }
  
    private void Construimage () {
        if (DEBUG) System.out.println( "*** DEBUG *** Construimage, irangbasse="+irangbasse+", iranghaute="+iranghaute+", icoldroite="+icoldroite+", icolgauche="+icolgauche);
        image = new BufferedImage (largeurtuile * (icoldroite - icolgauche + 1), hauteurtuile * (irangbasse - iranghaute + 1), BufferedImage.TYPE_INT_RGB) ;
        if (DEBUG) System.out.println( "*** DEBUG *** Construimage, largeur image="+image.getWidth()+", hauteur d'image="+image.getHeight());
        Graphics g = image.getGraphics();
        BufferedImage tuile = null ;
           for (int r = iranghaute; r <= irangbasse ; r++)   // pour chaque rangée
            for (int c = icolgauche ; c <= icoldroite ; c++) {  // pour chaque colonne
                try {	 
                    URL urlImage = new URL("http://gpp3-wxs.ign.fr/..."+ String.valueOf(r) + "&TILECOL=" + String.valueOf(c) + "&extParamId=aHR0cDovL3d3dy5nZW9wb3J0YWlsLmdvdXYuZnIvYWNjdWVpbA==");	 
                    InputStream in = urlImage.openStream();
                    tuile = ImageIO.read(in);
                    tuile.addTileObserver(null) ;
                    in.close();	 
                } catch (MalformedURLException e) {	 
                    e.printStackTrace();	 
                } catch (IOException e) {        	 
                    e.printStackTrace();	 
                }            
                g.drawImage(tuile, largeurtuile * (c - icolgauche), hauteurtuile * (r - iranghaute), null);
            }                                                                   // pour chaque colonne
        imcarte.setImage(image) ;
        if (DEBUG) System.out.println( "*** DEBUG *** Construimage, largeur imageIcon="+imcarte.getIconWidth()+", hauteur d'imageIcon="+imcarte.getIconHeight());
}                                                                               //   Construimage                                                           
    
    public static void main(String[] args) {                                    // méthode principale
        /**

    args[0] : nom du fichier image en sortie
    args[1] : numéro de rangée supérieure
    args[2] : numéro de colonne gauche
    args[3] : numéro de rangée inférieure
    args[4] : numéro de colonne droite
    */


        final String[] brgs = args ;
        if (DEBUG) System.out.println( "*** DEBUG *** main, brgs[0] = "+brgs[0]+", brgs[1]="+brgs[1]+", brgs[2]="+brgs[2]+", brgs[3]="+brgs[3]+", brgs[4]="+brgs[4]);
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new LoadImageApp (brgs[0], brgs[1], brgs[2], brgs[3], brgs[4]) ;
            }
        });        
    }                                                                           // méthode principale
}

J'ai juste fermer le commentaire au bon endroit, le code que je viens de te donner devrais fonctionner (je ne l'ai pas tester).

Pour compiler:

javac LoadImageApp.java plainfaing.png 11365 17020 11368 17023

Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn

Hors ligne

#11 Le 28/04/2014, à 14:15

yodaanneaux

Re : Executer un script java sur Ubuntu

Salut!

J'ai essayé le script que tu m'as renvoyé, mais hélas j'ai le même message d'erreur sad

javac LoadImageApp.java plainfaing.png 11365 17020 11368 17023
javac: invalid flag: 11365
Usage: javac <options> <source files>
use -help for a list of possible options

Mais merci de m'aider!

Hors ligne

#12 Le 02/05/2014, à 16:56

soshy

Re : Executer un script java sur Ubuntu

Salut,

Ce que tu as c'est un fichier source Java. Et ça n'est pas un script.
Un script est directement exécutable.
En java, on a le fichier source, on doit le compiler, et ensuite seulement, on peut l'exécuter.

commence par compiler le programme comme ça :

javac LoadImageApp.java

Là tu as probablement un fichier .class de généré si tout s'est bien passé.
Ensuite seulement tu peux essayer de l'exécuter avec :

java LoadImageApp.class plainfaing.png 11365 17020 11368 17023

Je viens d'essayer et le logiciel se lance bien, mais il ne fonctionne pas.
Il tente d'aller chercher la première image à cette adresse : http://gpp3-wxs.ign.fr/...11365&TILECOL … NjdWVpbA==

Et elle n'existe pas. Je pense que le programme à besoin de quelques petites modifications pour fonctionner correctement.

Dernière modification par soshy (Le 02/05/2014, à 19:07)

Hors ligne

#13 Le 04/05/2014, à 10:13

yodaanneaux

Re : Executer un script java sur Ubuntu

Salut,

Alors déjà un grand MERCI car j'ai pu faire tourner ce script! Bon il ne m'a généré qu'une image vide (noire), mais c'est déjà une belle avancée.
Juste une petite correction si je peux me permettre, une fois le code compilé la commande est plutôt :

java LoadImageApp plainfaing.png 11365 17020 11368 17023

Le script lance une sorte de visionneuse du fichier généré, et d'après mes tests le zoom de la carte sur geoportail n'empêche pas le script de tourner. J'ai essayé pour le zoom 1 : 27 084 et 1 : 6 771, et après quelques minutes le fichier a bien été généré.

Reste à rectifier ce bug qui génère un fichier image noir, mais j'ai espoir de trouver la solution (sauf si quelqu'un a une merveilleuse idée avant moi!).

Merci encore!

~~~~~~

Edit : je pense que le script utilise un API IGN dont l'adresse est fausse. Après avoir un peu potassé sur le net j'ai compris que pour avoir accès à l'API IGN, il fallait obtenir une clef, soit par le service api.ign.fr pour le développement et la recherche, ou par professionnels.ign.fr pour les professionnels.
Je pense que quand le script a été écrit, il n'y avait pas besoin de clef API IGN pour accéder au service, ou alors l'accès était différent bref, le script n'est plus actuel!

Je me trompe peut-être, mais je pense que je ne pourrai pas aller plus loin sans clef.

Dernière modification par yodaanneaux (Le 04/05/2014, à 15:26)

Hors ligne

#14 Le 05/05/2014, à 10:28

gl38

Re : Executer un script java sur Ubuntu

Le script a un problème avec l'accès, il répond après une petite modification du code

Server returned HTTP response code: 403 for URL: http://wxs.ign.fr/tyujsdxmzox31ituc2uw0qwl/geoportail/wmts?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&LAYER=GEOGRAPHICALGRIDSYSTEMS.MAPS&STYLE=normal&FORMAT=image/jpeg&TILEMATRIXSET=PM&TILEMATRIX=15&TILEROW=11653&TILECOL=16782&extParamId=aHR0cDovL3d3dy5nZW9wb3J0YWlsLmdvdXYuZnIvYWNjdWVpbA==

Pourtant l'adresse est bonne, quand on la copie dans firefox, une dalle s'affiche.

Pour le moment, il me semble plus simple de faire une copie d'écran et de calibrer à la main.
Cordialement,
Guy

Hors ligne

#15 Le 05/05/2014, à 11:45

yodaanneaux

Re : Executer un script java sur Ubuntu

Salut,

Comment t'as eu cette réponse du code?

Server returned HTTP response code: 403 for URL: http://wxs.ign.fr/tyujsdxmzox31ituc2uw0qwl/geoportail/wmts?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&LAYER=GEOGRAPHICALGRIDSYSTEMS.MAPS&STYLE=normal&FORMAT=image/jpeg&TILEMATRIXSET=PM&TILEMATRIX=15&TILEROW=11653&TILECOL=16782&extParamId=aHR0cDovL3d3dy5nZW9wb3J0YWlsLmdvdXYuZnIvYWNjdWVpbA==

C'est vrai que la copie écran est le seul truc qui fonctionne, mais c'est vraiment long de recoller les morceaux lorsqu'on veut un zoom assez précis. Et ne pas aboutir si près du but... roll

Dernière modification par yodaanneaux (Le 05/05/2014, à 11:47)

Hors ligne

#16 Le 05/05/2014, à 12:38

gl38

Re : Executer un script java sur Ubuntu

La réponse s'affiche dans la fenêtre terminal d'où je lance la commande que tu as donnée plus haut, quand on ferme avec control-C ou en fermant la fenêtre noire. Il suffit de remonter un peu et on a le dernier appel à l'ign.

On peut avoir une zone assez grande en copie d'écran, d'abord en maximisant l'affichage de la carte, ensuite on peut avec Alt-clic gauche faire glisser la fenêtre de firefox, ce qui permet de l'agrandir à une taille plus grande que l'écran et enfin avec l'extension de firefox Screengrab (fix version) on peut enregistrer la fenêtre en entier.

Sinon, on peut aller regarder ce qu'il y a dans le cache, ou continuer à explorer java, ou faire un script en shell, car si on utilise wget l'adresse qui est refusée donne la dalle. Par exemple :

wget  -A.jpg "http://wxs.ign.fr/tyujsdxmzox31ituc2uw0qwl/geoportail/wmts?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&LAYER=GEOGRAPHICALGRIDSYSTEMS.MAPS&STYLE=normal&FORMAT=image/jpeg&TILEMATRIXSET=PM&TILEMATRIX=16&TILEROW=22675&TILECOL=32993&extParamId=aHR0cDovL3d3dy5nZW9wb3J0YWlsLmdvdXYuZnIvYWNjdWVpbA==" -O dalle-16-22675-32993.jpg

Cordialement,
Guy

Hors ligne

#17 Le 05/05/2014, à 20:58

soshy

Re : Executer un script java sur Ubuntu

J'ai une bonne nouvelle pour vous !

Avoir lu que l'image s'affichait bien dans le navigateur mais que la récupérer avec wget ne fonctionnait pas, m'a intrigué. Du coup, j'ai cherché un peu tongue

Et, je vous présente les sources java modifiées, QUI FONCTIONNENT !!

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import javax.imageio.*;
import javax.swing.*;

public class LoadImageApp extends JFrame {
	private static final boolean DEBUG = false;
	private static BufferedImage image;
	private JButton btnplus, btnmoins, btwplus, btwmoins, btsplus, btsmoins,
			bteplus, btemoins;
	private final short hauteurtuile = 256;
	private final short largeurtuile = 256;
	private int iranghaute, irangbasse, icolgauche, icoldroite;
	private JScrollPane pancarte; // panneau image
	private ImageIcon imcarte = new ImageIcon();
	private int rwidth, rheight; // taille JFrame
	private int swidth, sheight;

	public LoadImageApp(String nomfichier, String rangsup, String colgauche,
			String ranginf, String coldroite) 
	{
		super("Géoportail crawler V0.9");
		final File outputfile = new File(nomfichier);
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); // get
																			// the
																			// screen
																			// size
																			// as
																			// a
																			// java
																			// dimension
		sheight = screenSize.height * 3 / 4; // get 3/4 of the height, and 3/4.
												// of the width
		swidth = screenSize.width * 3 / 4;
		final String filetype = nomfichier.substring(nomfichier
				.lastIndexOf(".") + 1);
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				try { // retrieve image
					ImageIO.write(
							image,
							(filetype.equals("*.jpg,*.JPG")
									|| filetype.equals("*.png,*.PNG")
									|| filetype.equals("*.gif,*.GIF")
									|| filetype.equals("*.jpeg,*.JPEG") || filetype
									.equals("*.bmp,*.BMP")) ? ".jpg" : filetype,
							outputfile);
				} catch (IOException ew) {
					ew.printStackTrace();
				}
				System.exit(0);
			}
		});
		iranghaute = Integer.parseInt(rangsup);
		irangbasse = Integer.parseInt(ranginf);
		icolgauche = Integer.parseInt(colgauche);
		icoldroite = Integer.parseInt(coldroite);
		rwidth = Math.min(swidth, largeurtuile * (icoldroite - icolgauche + 1));
		rheight = Math.min(sheight, hauteurtuile
				* (irangbasse - iranghaute + 1));
		if (DEBUG)
			System.out.println("*** DEBUG *** LoadImageApp,swidth=" + swidth
					+ ", sheight=" + sheight + ", rwidth=" + rwidth
					+ ", rheight=" + rheight);
		Construimage();
		setPreferredSize(new Dimension(rwidth, rheight));
		setLocation(50, 50);
		pancarte = new JScrollPane(new JLabel(imcarte));
		getContentPane().add(pancarte, BorderLayout.CENTER);
		Ecouteurbtn ec = new Ecouteurbtn();
		JPanel Panboun = new JPanel();
		btnplus = new JButton("+");
		btnplus.setPreferredSize(new Dimension(rwidth / 5, 15));
		btnplus.addActionListener(ec);
		Panboun.add(btnplus);
		btnmoins = new JButton("-");
		btnmoins.setPreferredSize(new Dimension(rwidth / 5, 15));
		btnmoins.addActionListener(ec);
		Panboun.add(btnmoins);
		getContentPane().add(Panboun, BorderLayout.NORTH);
		JPanel Panbouw = new JPanel();
		Panbouw.setLayout(new BoxLayout(Panbouw, BoxLayout.Y_AXIS));
		btwmoins = new JButton();
		Verticalize(btwmoins, "-", false);
		btwmoins.setPreferredSize(new Dimension(15, rheight / 5));
		btwmoins.addActionListener(ec);
		Panbouw.add(btwmoins);
		btwplus = new JButton();
		Verticalize(btwplus, "+", false);
		btwplus.setPreferredSize(new Dimension(15, rheight / 5));
		btwplus.addActionListener(ec);
		Panbouw.add(btwplus);
		getContentPane().add(Panbouw, BorderLayout.WEST);
		JPanel Panbous = new JPanel();
		btsmoins = new JButton("-");
		btsmoins.setPreferredSize(new Dimension(rwidth / 5, 15));
		btsmoins.addActionListener(ec);
		Panbous.add(btsmoins);
		btsplus = new JButton("+");
		btsplus.setPreferredSize(new Dimension(rwidth / 5, 15));
		btsplus.addActionListener(ec);
		Panbous.add(btsplus);
		getContentPane().add(Panbous, BorderLayout.SOUTH);
		JPanel Panboue = new JPanel();
		Panboue.setLayout(new BoxLayout(Panboue, BoxLayout.Y_AXIS));
		bteplus = new JButton();
		Verticalize(bteplus, "+", true);
		bteplus.setPreferredSize(new Dimension(15, rheight / 5));
		bteplus.addActionListener(ec);
		Panboue.add(bteplus);
		btemoins = new JButton();
		Verticalize(btemoins, "-", true);
		btemoins.setPreferredSize(new Dimension(15, rheight / 5));
		btemoins.addActionListener(ec);
		Panboue.add(btemoins);
		if (icolgauche == icoldroite) {
			btwmoins.setVisible(false);
			btemoins.setVisible(false);
		}
		if (iranghaute == irangbasse) {
			btnmoins.setVisible(false);
			btsmoins.setVisible(false);
		}
		getContentPane().add(Panboue, BorderLayout.EAST);
		pack();
		setVisible(true);
	}

	public class Ecouteurbtn implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			Object source = e.getSource();
			if (source == btnplus)
				iranghaute--;
			else if (source == btnmoins)
				iranghaute++;
			else if (source == btwplus)
				icolgauche--;
			else if (source == btwmoins)
				icolgauche++;
			else if (source == btsplus)
				irangbasse++;
			else if (source == btsmoins)
				irangbasse--;
			else if (source == bteplus)
				icoldroite++;
			else if (source == btemoins)
				icoldroite--;
			Construimage();
			if (icolgauche == icoldroite) {
				btwmoins.setVisible(false);
				btemoins.setVisible(false);
			} else {
				btwmoins.setVisible(true);
				btemoins.setVisible(true);
			}
			if (iranghaute == irangbasse) {
				btnmoins.setVisible(false);
				btsmoins.setVisible(false);
			} else {
				btnmoins.setVisible(true);
				btsmoins.setVisible(true);
			}
			pancarte.repaint();
			pack();
		}
	}

	static void Verticalize(JButton btn, String caption, boolean clockwise) {
		Font f = btn.getFont();
		FontMetrics fm = btn.getFontMetrics(f);
		int captionHeight = fm.getHeight();
		int captionWidth = fm.stringWidth(caption);
		BufferedImage bi = new BufferedImage(captionHeight + 4,
				captionWidth + 4, BufferedImage.TYPE_INT_ARGB);
		Graphics2D g = (Graphics2D) bi.getGraphics();

		g.setColor(new Color(0, 0, 0, 0)); // transparent
		g.fillRect(0, 0, bi.getWidth(), bi.getHeight());

		g.setColor(btn.getForeground());
		g.setFont(f);
		g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
				RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

		if (clockwise) {
			g.rotate(Math.PI / 2);
		} else {
			g.rotate(-Math.PI / 2);
			g.translate(-bi.getHeight(), bi.getWidth());
		}
		g.drawString(caption, 2, -6);

		Icon icon = new ImageIcon(bi);
		btn.setIcon(icon);

		btn.setMargin(new Insets(15, 2, 15, 2));
		btn.setActionCommand(caption);
	}

	private void Construimage() {
		if (DEBUG)
			System.out.println("*** DEBUG *** Construimage, irangbasse="
					+ irangbasse + ", iranghaute=" + iranghaute
					+ ", icoldroite=" + icoldroite + ", icolgauche="
					+ icolgauche);
		image = new BufferedImage(largeurtuile * (icoldroite - icolgauche + 1),
				hauteurtuile * (irangbasse - iranghaute + 1),
				BufferedImage.TYPE_INT_RGB);
		if (DEBUG)
			System.out.println("*** DEBUG *** Construimage, largeur image="
					+ image.getWidth() + ", hauteur d'image="
					+ image.getHeight());
		Graphics g = image.getGraphics();
		BufferedImage tuile = null;
		for (int r = iranghaute; r <= irangbasse; r++)
			// pour chaque rangée
			for (int c = icolgauche; c <= icoldroite; c++) { // pour chaque
																// colonne
				try {
					String url = "http://wxs.ign.fr/tyujsdxmzox31ituc2uw0qwl/geoportail/" +
							"wmts" +
							"?SERVICE=WMTS&VERSION=1.0.0" +
							"&REQUEST=GetTile" +
							"&LAYER=GEOGRAPHICALGRIDSYSTEMS.MAPS" +
							"&STYLE=normal&FORMAT=image/jpeg" +
							"&TILEMATRIXSET=PM" +
							"&TILEMATRIX=15" +
							"&TILEROW=" +
							String.valueOf(r)
							+ "&TILECOL="
							+ String.valueOf(c)
							+ "&extParamId=aHR0cDovL3d3dy5nZW9wb3J0YWlsLmdvdXYuZnIvYWNjdWVpbA=="
							;
					URL urlImage = new URL(url);
					
					URLConnection urlCon = urlImage.openConnection();
					urlCon.addRequestProperty("Accept-Language", "fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4");
					urlCon.addRequestProperty("Accept-Encoding", "gzip,deflate,sdch");
					urlCon.addRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
					urlCon.addRequestProperty("User-Agent", "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/34.0.1847.116 Chrome/34.0.1847.116 Safari/537.36");
					
					InputStream in = urlCon.getInputStream();
					tuile = ImageIO.read(in);

					tuile.addTileObserver(null);
					in.close();
				} catch (MalformedURLException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
				g.drawImage(tuile, largeurtuile * (c - icolgauche),
						hauteurtuile * (r - iranghaute), null);
			} // pour chaque colonne
		imcarte.setImage(image);
		if (DEBUG)
			System.out.println("*** DEBUG *** Construimage, largeur imageIcon="
					+ imcarte.getIconWidth() + ", hauteur d'imageIcon="
					+ imcarte.getIconHeight());
	} // Construimage

	public static void main(String[] args) { // méthode principale
		/**
		 * args [0] : nom du fichier image en sortie 
		 * args [1] : numéro de rangée supérieure 
		 * args [2] : numéro de colonne gauche 
		 * args [3] : numéro de rangée inférieure 
		 * args [4] : numéro de colonne droite
		 */

		final String[] brgs = args;
		if (DEBUG)
			System.out.println("*** DEBUG *** main, brgs[0] = " + brgs[0]
					+ ", brgs[1]=" + brgs[1] + ", brgs[2]=" + brgs[2]
					+ ", brgs[3]=" + brgs[3] + ", brgs[4]=" + brgs[4]);
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				new LoadImageApp(brgs[0], brgs[1], brgs[2], brgs[3], brgs[4]);
			}
		});
	} // méthode principale
}

Le code est toujours aussi moche, mais il marche smile
(testé avec les parametres suivant : plainfaing.png 11653 16782 11654 16783)

Hors ligne

#18 Le 05/05/2014, à 21:29

pires57

Re : Executer un script java sur Ubuntu

Bien joué,  je n'ai pas beaucoup de temps libre en ce moment pour programmer...


Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn

Hors ligne

#19 Le 05/05/2014, à 22:53

gl38

Re : Executer un script java sur Ubuntu

Récupérer l'image avec wget marche très bien : il faut mettre l'adresse entre des doubles quotes.
Il suffit de faire une double boucle pour parcourir la matrice et récupérer les dalles et les coller ensemble grâce à convert comme il est dit dans le post #1.
Avec 14 lignes de shell au lieu de 288 lignes de java.
Cordialement,
Guy

Hors ligne

#20 Le 06/05/2014, à 08:15

soshy

Re : Executer un script java sur Ubuntu

J'ai vu que wget fonctionnait si on mettait les doubles quote, cependant, le programme java continuait de retourner une 403, jusqu'à ce que j'y ajoute des headers http. Je trouve ça étrange et je n'ai pas vraiment d'explication à pourquoi java aurait besoin de header et pas wget pour acceder à la ressource. Si quelqu'un a une explication je suis preneur !

Sinon, la majeur partie du code java c'est pour gérer l'affichage de la carte ainsi que les boutons pour l'agrandir ou rétrécir si les parametres saisies n'allaient pas. Je ne pense pas que un script de 14 lignes face une preview en direct du fichier de sortie ni ne permette de l'agrandir ou rétrécir à la volée tongue.

Hors ligne

#21 Le 06/05/2014, à 11:04

gl38

Re : Executer un script java sur Ubuntu

Effectivement, je n'avais pas vu les boutons ! Au début, je n'avais qu'un écran noir puisque le programme java ne trouvait rien.
Maintenant, c'est beaucoup mieux, mais il reste un défaut. Le 15 qui est donné comme TILEMATRIX ne me semble pas universel : pour l'endroit qui m'intéresse il faut mettre 16...
Cordialement,
Guy

Hors ligne

#22 Le 06/05/2014, à 11:40

yodaanneaux

Re : Executer un script java sur Ubuntu

Alors là je suis bluffé! soshy Mille mercis! La programmation, c'est vraiment magique big_smile J'étais en train de creuser l'idée du shell dans mon coin, avec des commandes glanées par-ci par-là...


L'idée de mon shell était celle décrite par gl38, à savoir récupérer les images avec ce genre d'adresses http://wxs.ign.fr/tyujsdxmzox31ituc2uw0 … NjdWVpbA==
et de les assembler ensemble avec

convert \( 22672-32978.jpg 22672-32979.jpg 22672-32980.jpg

Mon début de code ressemblait à ça :

#!/bin/bash

cd /home/yoda/Bureau/Down

let "x=22671"
let "y=32977"

	while let "y < 33037";do


		wget  -A.jpg "http://wxs.ign.fr/tyujsdxmzox31ituc2uw0qwl/geoportail/wmts?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&LAYER=GEOGRAPHICALGRIDSYSTEMS.MAPS&STYLE=normal&FORMAT=image/jpeg&TILEMATRIXSET=PM&TILEMATRIX=16&TILEROW=$x&TILECOL=$y&extParamId=aHR0cDovL3d3dy5nZW9wb3J0YWlsLmdvdXYuZnIvYWNjdWVpbA==" -O $x-$y.jpg
	

	let "y=y+1"

	done

exit 0;

Mais malgré plusieurs tentatives de boucles imbriquées, je n'arrive pas à faire varier à la fois x et y. Le seul avantage de ce code serait d'avoir une carte plus précise, car les images des liens sont à l'échelle 1 : 6771.

Avec le code java, l'échelle de la carte générée est de 1 : 13542, mais ce code va rendre déjà bien service!

Je vais creuser l'idée du shell sous peu, car j'aime la précision big_smile

~~~~~~~~~

Edit :

J'ai résolu ce problème de boucles imbriquées wink

#!/bin/bash

cd /home/yoda/Bureau/Down

let "x=22671"
let "y=32977"

while let "x < 22708";do
	
	while let "y < 33037";do


		wget  -A.jpg "http://wxs.ign.fr/tyujsdxmzox31ituc2uw0qwl/geoportail/wmts?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&LAYER=GEOGRAPHICALGRIDSYSTEMS.MAPS&STYLE=normal&FORMAT=image/jpeg&TILEMATRIXSET=PM&TILEMATRIX=16&TILEROW=$x&TILECOL=$y&extParamId=aHR0cDovL3d3dy5nZW9wb3J0YWlsLmdvdXYuZnIvYWNjdWVpbA==" -O $x-$y.jpg
	

		let "y=y+1"
		done

	let "x=x+1"
	let "y=32977"
	done


exit 0;

Dernière modification par yodaanneaux (Le 06/05/2014, à 12:09)

Hors ligne

#23 Le 06/05/2014, à 13:15

soshy

Re : Executer un script java sur Ubuntu

La seule différence entre l'url que tu appelles pour récupérer tes images et celle que j'ai utilisé dans le programme java est la valeur de "TILEMATRIX" qui passe de 15 à 16.
Donc si tu remplace dans le programme java "&TILEMATRIX=15" par "&TILEMATRIX=16" , tu auras le résultats que tu souhaites

gl38 a écrit :

TILEMATRIX ne me semble pas universel

En effet, ce soir je prendrais 5 minutes pour modifier le programme afin qu'on puisse choisir le TILEMATRIX

Edit : en fait, plusieurs parametres sont variables. Si on lit la doc fournie ici
On se rend compte qu'on peut obtenir différents types de cartes avec LAYER (par exemple le cadastre), et dans le cas du cadastre les images retournées sont des png et pas des jpg, ce qui change FORMAT. On se rend compte aussi que TILEMATRIX semble être la résolution.
Zoom    Resolution (m)    Approximative Scale
15    4.777302    1 : 17062
16    2.388657    1 : 8531

On retombe bien sur l'ordre de grandeur ton tu parles yodaanneaux

Dernière modification par soshy (Le 06/05/2014, à 13:46)

Hors ligne

#24 Le 06/05/2014, à 13:53

yodaanneaux

Re : Executer un script java sur Ubuntu

Ok soshy tu es un dieu parmi les hommes big_smile je te bombarde de remerciements, je gagne un temps fou! Merci!

Hors ligne

#25 Le 06/05/2014, à 18:21

soshy

Re : Executer un script java sur Ubuntu

Et voilà, comme promis, l'échelle peut maintenant être choisi (voir la valeur de TILEMATRIX) il correspond au 2ème parametre

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import javax.imageio.*;
import javax.swing.*;

public class LoadImageApp extends JFrame {
	private static final boolean DEBUG = false;
	private static BufferedImage image;
	private JButton btnplus, btnmoins, btwplus, btwmoins, btsplus, btsmoins,
			bteplus, btemoins;
	private final short hauteurtuile = 256;
	private final short largeurtuile = 256;
	private int iranghaute, irangbasse, icolgauche, icoldroite;
	private JScrollPane pancarte; // panneau image
	private ImageIcon imcarte = new ImageIcon();
	private int rwidth, rheight; // taille JFrame
	private int swidth, sheight;
	private String zoom = null;

	public LoadImageApp(String nomfichier, String zoom, String rangsup, String colgauche,
			String ranginf, String coldroite) 
	{
		super("Géoportail crawler V0.9");
		final File outputfile = new File(nomfichier);
		this.zoom = zoom;
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); // get
																			// the
																			// screen
																			// size
																			// as
																			// a
																			// java
																			// dimension
		sheight = screenSize.height * 3 / 4; // get 3/4 of the height, and 3/4.
												// of the width
		swidth = screenSize.width * 3 / 4;
		final String filetype = nomfichier.substring(nomfichier
				.lastIndexOf(".") + 1);
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				try { // retrieve image
					ImageIO.write(
							image,
							(filetype.equals("*.jpg,*.JPG")
									|| filetype.equals("*.png,*.PNG")
									|| filetype.equals("*.gif,*.GIF")
									|| filetype.equals("*.jpeg,*.JPEG") || filetype
									.equals("*.bmp,*.BMP")) ? ".jpg" : filetype,
							outputfile);
				} catch (IOException ew) {
					ew.printStackTrace();
				}
				System.exit(0);
			}
		});
		iranghaute = Integer.parseInt(rangsup);
		irangbasse = Integer.parseInt(ranginf);
		icolgauche = Integer.parseInt(colgauche);
		icoldroite = Integer.parseInt(coldroite);
		rwidth = Math.min(swidth, largeurtuile * (icoldroite - icolgauche + 1));
		rheight = Math.min(sheight, hauteurtuile
				* (irangbasse - iranghaute + 1));
		if (DEBUG)
			System.out.println("*** DEBUG *** LoadImageApp,swidth=" + swidth
					+ ", sheight=" + sheight + ", rwidth=" + rwidth
					+ ", rheight=" + rheight);
		Construimage();
		setPreferredSize(new Dimension(rwidth, rheight));
		setLocation(50, 50);
		pancarte = new JScrollPane(new JLabel(imcarte));
		getContentPane().add(pancarte, BorderLayout.CENTER);
		Ecouteurbtn ec = new Ecouteurbtn();
		JPanel Panboun = new JPanel();
		btnplus = new JButton("+");
		btnplus.setPreferredSize(new Dimension(rwidth / 5, 15));
		btnplus.addActionListener(ec);
		Panboun.add(btnplus);
		btnmoins = new JButton("-");
		btnmoins.setPreferredSize(new Dimension(rwidth / 5, 15));
		btnmoins.addActionListener(ec);
		Panboun.add(btnmoins);
		getContentPane().add(Panboun, BorderLayout.NORTH);
		JPanel Panbouw = new JPanel();
		Panbouw.setLayout(new BoxLayout(Panbouw, BoxLayout.Y_AXIS));
		btwmoins = new JButton();
		Verticalize(btwmoins, "-", false);
		btwmoins.setPreferredSize(new Dimension(15, rheight / 5));
		btwmoins.addActionListener(ec);
		Panbouw.add(btwmoins);
		btwplus = new JButton();
		Verticalize(btwplus, "+", false);
		btwplus.setPreferredSize(new Dimension(15, rheight / 5));
		btwplus.addActionListener(ec);
		Panbouw.add(btwplus);
		getContentPane().add(Panbouw, BorderLayout.WEST);
		JPanel Panbous = new JPanel();
		btsmoins = new JButton("-");
		btsmoins.setPreferredSize(new Dimension(rwidth / 5, 15));
		btsmoins.addActionListener(ec);
		Panbous.add(btsmoins);
		btsplus = new JButton("+");
		btsplus.setPreferredSize(new Dimension(rwidth / 5, 15));
		btsplus.addActionListener(ec);
		Panbous.add(btsplus);
		getContentPane().add(Panbous, BorderLayout.SOUTH);
		JPanel Panboue = new JPanel();
		Panboue.setLayout(new BoxLayout(Panboue, BoxLayout.Y_AXIS));
		bteplus = new JButton();
		Verticalize(bteplus, "+", true);
		bteplus.setPreferredSize(new Dimension(15, rheight / 5));
		bteplus.addActionListener(ec);
		Panboue.add(bteplus);
		btemoins = new JButton();
		Verticalize(btemoins, "-", true);
		btemoins.setPreferredSize(new Dimension(15, rheight / 5));
		btemoins.addActionListener(ec);
		Panboue.add(btemoins);
		if (icolgauche == icoldroite) {
			btwmoins.setVisible(false);
			btemoins.setVisible(false);
		}
		if (iranghaute == irangbasse) {
			btnmoins.setVisible(false);
			btsmoins.setVisible(false);
		}
		getContentPane().add(Panboue, BorderLayout.EAST);
		pack();
		setVisible(true);
	}

	public class Ecouteurbtn implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			Object source = e.getSource();
			if (source == btnplus)
				iranghaute--;
			else if (source == btnmoins)
				iranghaute++;
			else if (source == btwplus)
				icolgauche--;
			else if (source == btwmoins)
				icolgauche++;
			else if (source == btsplus)
				irangbasse++;
			else if (source == btsmoins)
				irangbasse--;
			else if (source == bteplus)
				icoldroite++;
			else if (source == btemoins)
				icoldroite--;
			Construimage();
			if (icolgauche == icoldroite) {
				btwmoins.setVisible(false);
				btemoins.setVisible(false);
			} else {
				btwmoins.setVisible(true);
				btemoins.setVisible(true);
			}
			if (iranghaute == irangbasse) {
				btnmoins.setVisible(false);
				btsmoins.setVisible(false);
			} else {
				btnmoins.setVisible(true);
				btsmoins.setVisible(true);
			}
			pancarte.repaint();
			pack();
		}
	}

	static void Verticalize(JButton btn, String caption, boolean clockwise) {
		Font f = btn.getFont();
		FontMetrics fm = btn.getFontMetrics(f);
		int captionHeight = fm.getHeight();
		int captionWidth = fm.stringWidth(caption);
		BufferedImage bi = new BufferedImage(captionHeight + 4,
				captionWidth + 4, BufferedImage.TYPE_INT_ARGB);
		Graphics2D g = (Graphics2D) bi.getGraphics();

		g.setColor(new Color(0, 0, 0, 0)); // transparent
		g.fillRect(0, 0, bi.getWidth(), bi.getHeight());

		g.setColor(btn.getForeground());
		g.setFont(f);
		g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
				RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

		if (clockwise) {
			g.rotate(Math.PI / 2);
		} else {
			g.rotate(-Math.PI / 2);
			g.translate(-bi.getHeight(), bi.getWidth());
		}
		g.drawString(caption, 2, -6);

		Icon icon = new ImageIcon(bi);
		btn.setIcon(icon);

		btn.setMargin(new Insets(15, 2, 15, 2));
		btn.setActionCommand(caption);
	}

	private void Construimage() {
		if (DEBUG)
			System.out.println("*** DEBUG *** Construimage, irangbasse="
					+ irangbasse + ", iranghaute=" + iranghaute
					+ ", icoldroite=" + icoldroite + ", icolgauche="
					+ icolgauche);
		image = new BufferedImage(largeurtuile * (icoldroite - icolgauche + 1),
				hauteurtuile * (irangbasse - iranghaute + 1),
				BufferedImage.TYPE_INT_RGB);
		if (DEBUG)
			System.out.println("*** DEBUG *** Construimage, largeur image="
					+ image.getWidth() + ", hauteur d'image="
					+ image.getHeight());
		Graphics g = image.getGraphics();
		BufferedImage tuile = null;
		for (int r = iranghaute; r <= irangbasse; r++)
			// pour chaque rangée
			for (int c = icolgauche; c <= icoldroite; c++) { // pour chaque
																// colonne
				try {
					String url = "http://wxs.ign.fr/tyujsdxmzox31ituc2uw0qwl/geoportail/" +
							"wmts" +
							"?SERVICE=WMTS&VERSION=1.0.0" +
							"&REQUEST=GetTile" +
							"&LAYER=GEOGRAPHICALGRIDSYSTEMS.MAPS" +
							"&STYLE=normal&FORMAT=image/jpeg" +
							"&TILEMATRIXSET=PM" +
							"&TILEMATRIX=" + zoom + 
							"&TILEROW=" +
							String.valueOf(r)
							+ "&TILECOL="
							+ String.valueOf(c)
							+ "&extParamId=aHR0cDovL3d3dy5nZW9wb3J0YWlsLmdvdXYuZnIvYWNjdWVpbA=="
							;
					URL urlImage = new URL(url);
					
					URLConnection urlCon = urlImage.openConnection();
					urlCon.addRequestProperty("Accept-Language", "fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4");
					urlCon.addRequestProperty("Accept-Encoding", "gzip,deflate,sdch");
					urlCon.addRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
					urlCon.addRequestProperty("User-Agent", "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/34.0.1847.116 Chrome/34.0.1847.116 Safari/537.36");
					
					InputStream in = urlCon.getInputStream();
					tuile = ImageIO.read(in);

					tuile.addTileObserver(null);
					in.close();
				} catch (MalformedURLException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
				g.drawImage(tuile, largeurtuile * (c - icolgauche),
						hauteurtuile * (r - iranghaute), null);
			} // pour chaque colonne
		imcarte.setImage(image);
		if (DEBUG)
			System.out.println("*** DEBUG *** Construimage, largeur imageIcon="
					+ imcarte.getIconWidth() + ", hauteur d'imageIcon="
					+ imcarte.getIconHeight());
	} // Construimage

	public static void main(final String[] args) { // méthode principale
		/**
		 * args [0] : nom du fichier image en sortie 
		 * args [1] : valeur de TILEMATRIX (zoom)
		 * args [2] : numéro de rangée supérieure 
		 * args [3] : numéro de colonne gauche 
		 * args [4] : numéro de rangée inférieure 
		 * args [5] : numéro de colonne droite
		 */

		
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				int i = 0;
				new LoadImageApp(args[i++], args[i++], args[i++], args[i++], args[i++], args[i++]);
			}
		});
	} // méthode principale
}

J'ai testé avec les parametres suivant : plainfaing.png 16 22671 32977 22672 32978

Hors ligne