[Java] Coordonnées, zoom, échelle : intéract°

Fermé
JavaStunt - 2 mai 2007 à 10:05
 Djoh - 31 janv. 2008 à 12:09
Bonjour,
Je cherche une api (ou des classes) de modification d'affichage d'image en temps réel en java.

Je vais préciser :
J'ai programmé une interface graphique qui affiche des cartes.
Mon but est de rentre intéractifs certains points sur celle ci.
Pour ce faire je définis des points d'après un tableau exel contenant les coordonnées GPS des points.

Le problème c'est que les coordonnée GPS en java... ^^ c'est pas google map quoi.

Je voudrais donc trouver un moyen de :
- Définir de nouvelles coordonnées sur la carte (changer la valeur du point d'origine...).
- Définir une nouvelle échelle...


2 ° problème :

Intéragir sur la carte en effectuant des zooms !
Pour rendre plus précis l'affichage des points qui sont rapprochés.
En quelque sorte cliquer sur un "+" qui "zoome".
D'ou le changement d'échelle aussi.


Donc si vous connaissez des packages, classes seules, apis qui pouraient m'aider à avancer je vous en serais très reconnaissant :).

Merci d'avance.
A voir également:

7 réponses

Utilisateur anonyme
3 mai 2007 à 16:55
Salut!

Voici une piste (à affiner) pour le zoom:


import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 * Created on 03-mai-07
 * 
 * @author:HackTrack
 */

public class ZoomPanel extends JPanel implements MouseWheelListener {
	private BufferedImage sourceImage;

	private int sourceImageWidth;

	private int sourceImageHeight;

	private Image scaledImage;
	private double zoom = 1d;

	public ZoomPanel() {
		super();
		initializePanel();
	}

	private void initializePanel() {
		setPreferredSize(new Dimension(640, 480));
		try {
			sourceImage = ImageIO.read(new File("F:/testBG.jpg"));
			sourceImageWidth = sourceImage.getWidth();
			sourceImageHeight=sourceImage.getHeight();
			addMouseWheelListener(this);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void paint(Graphics g){
		
		int width = (int)(sourceImageWidth*zoom);
		int height = (int)(sourceImageHeight*zoom);
		Image img = sourceImage.getScaledInstance(width, height, Image.SCALE_SMOOTH);
		g.drawImage(img,0,0,null);
	}

	public void mouseWheelMoved(MouseWheelEvent e) {
		int wheelRotation =e.getWheelRotation(); 
		if(zoom>1){
			zoom+=wheelRotation;
		}else if(zoom==1){
			zoom=(wheelRotation==1?zoom+wheelRotation:0.5);
		}else if(zoom<1){
			zoom/=(wheelRotation*2);
		}
		repaint();
	}

	public static void main(String[] args) {
		JFrame demo = new JFrame();
		demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		demo.add(new ZoomPanel());
		demo.pack();
		demo.setVisible(true);
	}

}



;-)
HackTrack
3
Il est pas mal cet exemple !

Par contre, il faudrait s'occuper des coordonnées de l'image après le zoom, pour zoomer sur la partie centrale de l'image.
2
Je souhaiterais aussi ajouter une barre défilante lors du zoom, afin de se déplacer sur la carte.
1
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
2 mai 2007 à 12:23
Pour ce qui est des classes de modifs... aucune idée.
Pour ce qui est de la barre de défilement, donc une scrollbar, il te suffit de mettre ton image dans un JScrollPane et de fixer la taille de ce JScrollPane.
Ainsi, quand tu zoom, ton image grandie (plutot que de faire toujours la même taille).
De la même facon (cela peut etre une idée), sur ta carte, tu peux mettre en place une hiérarchie des éléments de manière a n'afficher que certains lorsque le zomm atteind un certains seuil, un peu comme tous les systemes de map actuels.

Par exemple, les villes seraient au niveau 3, les villages au niveau 4, etc...

Enfin c'est une piste que je propose, je ne suis pas spécialiste en la matière malheureusement pour toi ^^

Bon courage pour la suite en tout cas !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
En te remerciant, ca va déja bien m'aider :).


Par contre pour le zoom ce serais plus un zoom en "temps direct" . Le zoom ici ne permettra pas d'entrer dans les détails mais de voir plus précisément un point par rapport à un autre. (certains lieu géographiques se superposent presque en zoom 100% mais sont différents a 150% ...).


Merci beaucoup kij



PS : 82 powa :)
0
Voila du nouveau,

Pour les coordonnées je vais faire du "bricolage".
Faire une addition avec l'origine existante et celle que je veu.
Et donc pour la nouvelle échelle trouver un coefficiant multipliant celles données pour trouver celles souhaitées.


Mais il me reste encore le problème de zoom.

Si un de vos a des idées?

En vous remerciant.
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
3 mai 2007 à 16:31
Re :)

Pour l'histoire du zoom, je ne suis pas sur que tu puisse vraiment zoomer correctement de cette facon.
Si c'est un genre de google map que tu veux faire, je pense que le systeme mis en place est plus basés sur des niveaux hiérarchiques d'informations plutot que sur un zoom plus précis d'une seule et même image.

Enfin, si c'est ce que tu souhaite faire, tu peux toujours regarder ce tutos sur les opération sur images :
https://java.developpez.com/faq/gui?page=Les-images

0