Soyez le premier à donner votre avis sur cette source.
Snippet vu 8 080 fois - Téléchargée 18 fois
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 /**
10 mai 2014 à 12:04
Merci encore à soshy.
Modifié par mikayoda le 4/05/2014 à 11:23
C'est en réalité un fichier source Java, pas un script.
Un script est directement exécutable.
En java, le fichier source doit être compilé, et ensuite seulement, exécuté.
compilation du programme :
Il y a un fichier .class de généré.
Ensuite il faut l'exécuter avec :
Mais l'URL dans le script est faux (problème d'API!).
Affaire à suivre...
Merci soshy!
Modifié par mikayoda le 29/04/2014 à 15:34
je n'ai pas réussi à faire tourner ce script. Je pense qu'il ne fonctionne pas à cause de la résolution IGN sur geoportail, qui n'est pas à 1:25 000 pile mais à 27 084.
Pour ceux qui souhaiterais tout de même essayer, la démarche à suivre est la suivante :
- dans un bloc note, coller le script et nommer le fichier LoadImageApp.java (pas de .txt à la fin bien sûr)
- se déplacer dans le dossier qui contient le fichier, ex : cd c:\Users\
- lancer le script avec la la commande suivante (en ayant au préalable installé JDK de java!) javac LoadImageApp.java plainfaing.png 11365 17020 11368 17023
11365 et 17020 sont respectivement les numéros de lignes et de colonnes obtenus dans le cache de votre navigateur, (par cacheviewer par exemple). Le premier couple désigne l'image en haut à gauche, le deuxième couple désigne l'image en bas à droite, de sorte d'encadrer la carte que vous souhaiter obtenir.
J'ai toujours obtenu ce message d'erreur :
javac: invalid flag: 11365
Usage: javac <options> <source files>
use -help for a list of possible options
si quelqu'un trouve la solution merci de partager!
Modifié par mikayoda le 25/04/2014 à 17:23
je déterre ce topic, qui le mérite je pense!
je suis intéressé par ton script, mais comme je suis un noob, je ne sais pas comment utiliser le script, que ça soit sous windows ou sous linux.
J'ai mis le script dans un bloc note, et après? J'ai essayé de comprendre en fouinant sur google, mais le jargon me manque pour comprendre ;)
En tout cas c'est une super initiative!
Merci!
Mika.
12 mars 2013 à 16:43
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.