JXMapKit Koordinaten korrigieren

  • Themenstarter Themenstarter JXMapKit
  • Beginndatum Beginndatum
J

JXMapKit

Gast
Hallo Leute,

ich nutze das JXMapKit um in einer Anwendung eine kleine Karte anzuzeigen.
Es ist möglich auf dieser Karte durch aufspannen eines Rects einen Berich
auszuwählen. Ich lese dann die Koordinaten und somit alle darin vorkommenden
Städte aus.

Das funktioniert wunderbar bis auf eine Sache:

Die Karte lässt sich unendlich weit nach links oder Rechts verschieben und
wiederholt dabei immer wieder das Kartenmaterial (das ist eine gewünschte Funktion).
Dadurch verändern sich allerdings auch die Koordinaten und ich muss sie irgendwie
korrigieren.

Beispiel:

Normalerweise liegt Hamburg bei 53.55 / 10
Wenn ich die Karte nun einmal ganz nach links
verschiebe bis wieder Hamburg auftaucht liegt
Hamburg bei 53.55 / -349,9805

Gibt es da eine Intelligente Möglichkeit das zu korrigieren?
 
Also zur Ergänzung:

Klar ist, dass es sich natürlich immer um 360 verringert bzw. erhöht wenn man nach rechts dreht.
Klar ist allerdings nicht, wie ich ermitteln kann, wie oft die Karte gedreht worden ist.
 
Hmm... habs nach wie vor nicht lösen können.

Mal ein wenig relevanten Code mit Kommentaren, vllt. hat jemand eine Idee:

Java:
public class MapViewer extends MouseAdapter implements Painter<JXMapViewer> {
	private  final JXMapKit mapKit = new JXMapKit();
	private final JPanel mapPanel = new JPanel();
	private Rectangle rect, start, end = null;
	private GeoPosition startPos = null;
	private GeoPosition endPos = null;
	private NumberFormat nf = NumberFormat.getInstance();
	
	public MapViewer() {
		mapKit.setDefaultProvider(DefaultProviders.OpenStreetMaps);
		mapKit.setPreferredSize(new Dimension(380, 310));
		mapKit.setMiniMapVisible(false);
		mapKit.setAddressLocationShown(false);
		mapKit.setDataProviderCreditShown(false);
		mapKit.getMainMap().addMouseListener(this); 
		mapKit.getMainMap().addMouseMotionListener(this); 
		mapKit.getMainMap().setOverlayPainter(this);
		mapKit.getMainMap().setToolTipText(Tooltipps.TOOLTIPP_MAP);
		
		mapPanel.add(mapKit);
	      
		nf.setMinimumFractionDigits(2);
		nf.setMaximumFractionDigits(4);
	}
	
	public void mousePressed(MouseEvent e) {
                // hier wird der Punkt geholt. Der Punkt bleibt immer gleich
                // egal wie oft ich die map drehe, das funktioniert korrekt
                // ist ja auch logisch, da sich dieser Punkt nicht auf die Map  bezieht
                // sondern auf die Position im JPanel
                // Dieser Punkt wird in eine GeoPosition umgewandelt (da es immer der
                // gleiche Punkt ist, wundert es mich, dass wenn ich die Karte um 360° 
                // nach links drehe eine um 360° verschobene GeoPosition bekomme

		startPos = mapKit.getMainMap().convertPointToGeoPosition(e.getPoint());
		
		if(e.getButton() != MouseEvent.BUTTON1) {
			rect = null;
			start = null;
		} else {
			start = new Rectangle(e.getPoint());
			((JXMapViewer) e.getSource()).setPanEnabled(false);
		}
	}

	public void mouseDragged(MouseEvent e) {
                // Das gleiche hier

		endPos = mapKit.getMainMap().convertPointToGeoPosition(e.getPoint());
		
		if(start != null) {
			end = new Rectangle(e.getPoint());
			rect = start.union(end);
		}

		((JXMapViewer) e.getSource()).repaint();
	}

	public void mouseReleased(MouseEvent e) {
                // Das gleiche hier

		endPos = mapKit.getMainMap().convertPointToGeoPosition(e.getPoint());
		
		if(start == null) {
			return;
		}

		end = new Rectangle(e.getPoint());
		rect = start.union(end);
		((JXMapViewer) e.getSource()).setPanEnabled(true);
		((JXMapViewer) e.getSource()).repaint();
	}

	public void paint(Graphics2D gd, JXMapViewer mapViewer, int i, int j) {
		Color borderColor = new Color(0, 0, 200);
		Color regionColor = new Color(0, 0, 200, 50);
		
		if(rect != null) {
			gd.setColor(regionColor);
			gd.fillRect(rect.x, rect.y, rect.width, rect.height);
			gd.setColor(borderColor);
			gd.drawRect(rect.x, rect.y, rect.width, rect.height);

			updateTextFields();
		}
	}
	
	private void updateTextFields() {
		TextFields.latitude1.setText(nf.format(startPos.getLatitude()));
		TextFields.longitude1.setText(nf.format(startPos.getLongitude()));
		TextFields.latitude2.setText(nf.format(endPos.getLatitude()));
		TextFields.longitude2.setText(nf.format(endPos.getLongitude()));
	}
}
 

Zurück
Oben