#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à
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
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
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...
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
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
(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 .
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 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
~~~~~~~~~
Edit :
J'ai résolu ce problème de boucles imbriquées
#!/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
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 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