Création de cartes à partir du géoportail de l'ign

Contenu du snippet

Ce programme extrait des dalles de cartes IGN et génère en sortie une carte ajustable dynamiquement. Exemple de script de lancement : "java LoadImageApp plainfaing.png 11365 17020 11368 17023" où "plainfaing.png" est le nom de l'image qui sera créée en sortie de programme et les couples "11365 17020" d'une part et "11368 17023" d'autre part sont d'une part, les N° de rangée et de colonne de la dalle de coin en haut et à gauche d'autre part, les N° de rangée et de colonne de la dalle de coin en bas et à droite tels qu'on peut les trouver ds le cache de FireFox après une visite sur Geoportail de l'endroit d'où on veut extraire la carte.
Ce programme simplifie la procédure décrite en http://jrepetto.free.fr/ttmaps/geoportail

Source / Exemple :


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 }

A voir également

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.

Du même auteur (mant2011)