Koordinaten LONG/LAT eines neuen Punktes in bestimmter Entfernen und Winkel berechnen

C

Christoph74

Aktives Mitglied
Hallo,

kennt jemand ne Methode, mit welcher ich von einem Punkt aus eine bestimmte Entfernung in eine bestimmte Richtung gehe und die mir die Koordinaten von diesem neuen Punkt berechnet?

Beispiel:
Ausgangspunkt:
48.124296, 11.548414

Jetzt möchte ich die Koordinaten des Punktes, welcher in
20m Entfernung
in einer Richtung von 270°
liegt.

Danke und Grüße
Christoph
 
kneitzel

kneitzel

Top Contributor
Evtl. hilft diese Seite etwas weiter, da die die Mathematik mit dem "Kugeldreieck" etwas erläutert. Die Berechnungen kann man dann natürlich auch entsprechend umstellen, wenn weiss, wie man auf der Kugel zu dem nächsten Punkt kommt um dann da die Koordinaten zu bekommen.

 
C

Christoph74

Aktives Mitglied
Halllo,

erstmal vielen Dank für den Tip!

Da ich Distanzen von "nur" bis ca. 50m habe und das Ergebnis nur auf rund 1m genau benötige, hab ich das jetzt so "gelöst", dass ich
- long/lat in UTM umwandle
- dann mit Pythagoras dx und dy berechne
- diese dann zu den UTM-Koordinaten aufaddiere
- die UTM wieder in long/lat wandle

-> hab die Ergebnisse mit Google Maps überprüft -> sollte soweit passen.

JAVA:
   public double [] lat_long_In_Bestimmter_Entfernung_Und_Winkel_Berechnen(double lat, double lon, int entfernung, double winkel)
    {
        UTMRef utmref = toUTMRef(lat, lon);
 
        double dx = (Math.sin(Math.PI*winkel/180) * entfernung);
        double dy = Math.cos(Math.PI*winkel/180) * entfernung;                           
    
        
        double x = utmref.getEasting()+dx;               
        double y = utmref.getNorthing()+dy;       
              
        double [] lonlat = this.utm2longlat(x, y);
        

        return lonlat;
        
    }


Viele Grüße
Christoph
 
Blender3D

Blender3D

Top Contributor
kennt jemand ne Methode, mit welcher ich von einem Punkt aus eine bestimmte Entfernung in eine bestimmte Richtung gehe und die mir die Koordinaten von diesem neuen Punkt berechnet?
Erstelle dir eine Vektor Klasse. Dann brauchst du nur einen Richtungsvektor mit dem Entsprechenden Winkel erzeugen. Dieser wird dann mit der geforderten Länge multipliziert und schließlich zum Startpunkt addiert.
Hier eine Demo wie man das realisieren könnte.
1619728445213.png

TestVector2D:
import javax.swing.JFrame;

public class TestVector2D {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Vector");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new VectorPanel(500, 500));
        frame.pack();
        frame.setResizable(false);
        frame.setVisible(true);
    }
}
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.Vector;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

@SuppressWarnings("serial")
public class VectorPanel extends JPanel {
    private static JTextField[] input = { new JTextField(new MyFloatDocument(), "", 1), new JTextField() };
    private static String[] label = { "Winkel", "Länge" };
    public final static int ANGEL = 0;
    public final static int LENGHT = 1;

    private JButton btnAdd = new JButton("add Point");
    private DefaultListModel<String> model = new DefaultListModel<String>();
    private JList<String> list = new JList<String>(model);

    private Vector<Vector2D> path = new Vector<Vector2D>();
    private Rectangle bounds;

    public VectorPanel(int width, int height) {
        setLayout(null);
        add(btnAdd);
        add(list);
        updateSize(width, height);
        path.add(new Vector2D(width / 2, height / 2));
        btnAdd.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int ok = JOptionPane.showConfirmDialog(null, getObjects(), "Positionswerte eingeben",
                        JOptionPane.OK_OPTION);
                if (ok == JOptionPane.OK_OPTION)
                    addPos();
            }

            private void addPos() {
                double angle = Double.parseDouble(input[ANGEL].getText());
                double lenght = Double.parseDouble(input[LENGHT].getText());
                Vector2D pos = path.lastElement();
                Vector2D direction = new Vector2D(angle);
                direction = direction.multiply(lenght);
                pos = pos.add(direction);
                if (!pos.isInside(bounds)) {
                    JOptionPane.showMessageDialog(null, pos + " is outside of allowed bounds!");
                    return;
                }
                int size = path.size();
                model.add(size - 1, String.format("%d W %.1f, L%.1f", size, angle, lenght));
                path.add(pos);
                repaint();
            }
        });
    }

    public void drawPoint(Graphics g, Vector2D point, int num) {
        int sizeP = g.getFont().getSize() * 2;
        int x = point.intX() - sizeP / 2;
        int y = point.intY() - sizeP / 2;
        g.drawOval(x, y, sizeP, sizeP);
        g.setColor(Color.GREEN.darker());
        g.drawString(num + "", x, y + 3 * sizeP / 2);
    }

    private static Object[] getObjects() {
        Object[] fields = new Object[label.length * 2];
        int cnt = 0;
        for (int i = 0; i < fields.length - 1; i += 2) {
            fields[i] = label[cnt];
            fields[i + 1] = input[cnt];
            cnt++;
        }
        return fields;
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.BLUE);
        g.drawRect(bounds.x, bounds.y, bounds.width, bounds.height);

        Iterator<Vector2D> it = path.iterator();
        Vector2D start = it.next();

        int cnt = 1;
        while (it.hasNext()) {
            Vector2D end = it.next();
            g.setColor(Color.DARK_GRAY);
            g.drawLine(start.intX(), start.intY(), end.intX(), end.intY());
            drawPoint(g, start, cnt++);
            start = end;
        }
        g.setColor(Color.RED);
        drawPoint(g, start, cnt);

    }

    private void updateSize(int width, int height) {
        setPreferredSize(new Dimension(width, height));
        int frame = 5;
        int listWidth = (width - 2 * frame) / 4;
        int listHeight = height - 2 * frame;
        int btnHeight = 30;
        list.setBounds(frame, frame, listWidth, listHeight);
        btnAdd.setBounds(frame * 2 + listWidth, frame, 100, btnHeight);
        bounds = new Rectangle(listWidth + 3 * frame, 2 * frame + btnHeight, width - listWidth - 4 * frame,
                height - 4 * frame - btnHeight);
    }

}
Vector2D:
import java.awt.Point;
import java.awt.Rectangle;

public class Vector2D {
    public final double x;
    public final double y;

    public Vector2D(double angle) {
        double angleRad = Math.toRadians(angle);
        x = Math.cos(angleRad);
        y = -Math.sin(angleRad);
    }

    public Vector2D(double x, double y) {
        this.x = x;
        this.y = y;
    }

    public Vector2D(Vector2D value) {
        x = value.x;
        y = value.y;
    }

    public Vector2D add(Vector2D v) {
        return new Vector2D(x + v.x, y + v.y);
    }

    public int intX() {
        return (int) Math.round(x);
    }

    public int intY() {
        return (int) Math.round(y);
    }

    public boolean isInside(Rectangle rect) {
        return rect.contains(new Point(intX(), intY()));
    }

    public Vector2D multiply(double d) {
        return new Vector2D(x * d, y * d);
    }

    @Override
    public String toString() {
        return String.format("(%.2f, %.2f)", x, y);
    }
}
MyFloatDocument stellt Eingabe von Floatwerten sicher:
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

@SuppressWarnings("serial")
public class MyFloatDocument extends PlainDocument {

    public void insertString(final int offset, String text, final AttributeSet attributeSet) {
        try {
            if (!text.matches("[+-]?([0-9]*[.])?[0-9]+"))
                return;
            super.insertString(offset, text, attributeSet);
        } catch (BadLocationException e) {
            e.printStackTrace();
        }
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C UTM Koordinaten in LATITUDE und LONGITUDE umrechnen Allgemeine Java-Themen 13
H MouseEntered mit X und Y Koordinaten Allgemeine Java-Themen 7
MaxG. Kreis Koordinaten Allgemeine Java-Themen 7
4a61766120617274697374 PDF iText Wort Koordinaten auslesen Allgemeine Java-Themen 1
T Geographische in UTM Koordinaten umwandeln Allgemeine Java-Themen 5
I Koordinaten von Fluglinie auf Openstreetmap verfolgen Allgemeine Java-Themen 1
U Koordinaten alle Pixel eines Dreiecks zeichnen ausgeben Allgemeine Java-Themen 5
K AWT Aus einer Datei die Koordinaten Angaben herauslesen und dreidimensional darstellen Allgemeine Java-Themen 2
Zettelkasten Vektor mit Koordinaten erstellen Allgemeine Java-Themen 2
J JXMapKit Koordinaten korrigieren Allgemeine Java-Themen 4
K Mouse koordinaten im programm Allgemeine Java-Themen 4
L Koordinaten des Mouselistener nicht überall gleich Allgemeine Java-Themen 13
Eldorado Berechnung von Koordinaten, die zufällig aussehen Allgemeine Java-Themen 5
S Koordinaten aus einem Text filtern Allgemeine Java-Themen 11
M Radianwert wiederholt sich trotz unterschiedlicher zufälliger Koordinaten Allgemeine Java-Themen 6
S Bild anhand von Koordinaten einteilen Allgemeine Java-Themen 7
B API geographische Koordinaten Allgemeine Java-Themen 9
S Testen einer Anwendung durch klicken von Koordinaten Allgemeine Java-Themen 7
G Wort am Bildschirm -- Koordinaten suchen Allgemeine Java-Themen 2
G Richtung berechnen anhand Koordinaten Allgemeine Java-Themen 3
F Koordinaten eines gedrehten Rechtecks Allgemeine Java-Themen 4
C kürzester weg zwischen zwei Punkten, Koordinaten finden Allgemeine Java-Themen 15
M Map <Long, String> zu Map<String, Long> Allgemeine Java-Themen 9
G JTextField Inhalt in einem Long einfügen Allgemeine Java-Themen 2
B Long in einen Double umwandeln und im Label anzeigen Allgemeine Java-Themen 7
P Berechnungen: unterschiedliche Rundungsfehler bei Long? Allgemeine Java-Themen 3
L Variablen longBitsToDouble(long bits) als int Allgemeine Java-Themen 6
A Datentypen Long.valueOf liefert kein "L" am Ende Allgemeine Java-Themen 3
A Long variable wird negativ??? Allgemeine Java-Themen 1
A Zahl zu lang für Long Allgemeine Java-Themen 3
T Datentypen interner Speicherverbrauch x64 long vs. int Allgemeine Java-Themen 8
K Datum+Uhrzeit in Millisekunden (long) umwandeln Allgemeine Java-Themen 7
Z Cast von Long zu Integer funktionert nicht Allgemeine Java-Themen 3
H Time to long Allgemeine Java-Themen 9
I Gleichzeitiger zugriff auf ein Long über Threads Allgemeine Java-Themen 2
G Unterschied Long - Int Allgemeine Java-Themen 9
D LinkedList anhand einer long-Variable der Objekte sortieren Allgemeine Java-Themen 5
J httpclient: Post-method aber trotzdem "URI to long&quot Allgemeine Java-Themen 4
A serial Version UID field of type long Allgemeine Java-Themen 5
C Wenn long int zu klein Allgemeine Java-Themen 17
L intgeger fehler bei long[][] Allgemeine Java-Themen 4
P The static method sleep(long) from the type Thread should. Allgemeine Java-Themen 2
RawBit Datum -> long Allgemeine Java-Themen 9
D Object to Long casting Allgemeine Java-Themen 9
U Versions-Konfusion: Ist long kein object? Allgemeine Java-Themen 3
H Linksschieben << bei long-Datentypen Allgemeine Java-Themen 2
B Long.parseLong löst teilweise Exception aus. Allgemeine Java-Themen 2
B long : Java-Bug? Allgemeine Java-Themen 3
M Umwandlung eines Long-Wertes in einen String Allgemeine Java-Themen 2
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
gotzi242 Schatzsuche mithilfe eines O(log n) Algorithmus Allgemeine Java-Themen 2
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
L Direktes return eines Array geht nicht Allgemeine Java-Themen 20
S Mittelwert anhand eines Stream berechnen Allgemeine Java-Themen 5
kodela Breite eines erweiterten Monitors feststellen Allgemeine Java-Themen 5
R Zeilen eines 2d Arrays abwechselnd links und rechts mit Nullen auffüllen Allgemeine Java-Themen 14
Zrebna Alternative Darstellung eines Codesnippets Allgemeine Java-Themen 33
kodela Inhalt eines Arrays ändert sich mysteriös Allgemeine Java-Themen 2
bueseb84 Wget mit Wildcards - oder wie lädt man bei JFrog die letzte Version eines Artifacts herunter Allgemeine Java-Themen 3
N Erkennen eines Programs Allgemeine Java-Themen 2
N Pausieren eines Programmes Allgemeine Java-Themen 4
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
F Wie bekommt man alle Filenamen eines Webserver Verzeichnisses Allgemeine Java-Themen 6
A Fehler beim Öffnen eines Projekts Allgemeine Java-Themen 6
N Eigenschaften eines Buttons per Setter verändern Allgemeine Java-Themen 5
S Ausfuehrung eines Programms aufzeichnen..? Allgemeine Java-Themen 4
X Ermittlung eines doppelte Paars mit Streams Allgemeine Java-Themen 50
Stonie Prüfen von direkter Implementierung eines Interfaces Allgemeine Java-Themen 7
S Vorbereitung eines Praktikums Allgemeine Java-Themen 4
H Aufruf eines Web Service anhand übergebenen Parameter Allgemeine Java-Themen 2
M Weiterleiten von empfangenen Nachrichten eines StompSessionHandlers Allgemeine Java-Themen 1
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
H Rename eines Projekts Allgemeine Java-Themen 1
J Fenstergröße eines anderen Programmes auslesen Allgemeine Java-Themen 9
scitex auf Klassen innerhalb eines package zugreifen Allgemeine Java-Themen 22
Meeresgott Erste Schritte Sourcetree - Git | Suchen eines Commits Allgemeine Java-Themen 2
E Status eines USB Mikrofon abfragen Allgemeine Java-Themen 2
DaCrazyJavaExpert OOP Ansätze und Tipps zum Porgrammieren eines Taschenrechners Allgemeine Java-Themen 25
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
I Verbindung eines Java-Plugins mit Webserver Allgemeine Java-Themen 3
L Auswertung eines Testes funktioniert nicht Allgemeine Java-Themen 37
G Iteratoren - Wie kann man mithilfe von Iteratoren nur jeden zweiten Wert eines TreeSets ausgeben? Allgemeine Java-Themen 4
GreenTeaYT Elemente eines 2Dim LinkedList von links nach rechts ausgeben? Allgemeine Java-Themen 0
B Spalten eines 2d-Arrays Allgemeine Java-Themen 2
M Rechenprogramm eines wissenschaftlichen Taschenrechners Allgemeine Java-Themen 4
S Eigenschaften (hier Verknüpfung) eines Files lesen Allgemeine Java-Themen 2
E Typüberprüfung eines chars Allgemeine Java-Themen 5
H Hilfe bei Erstellung eines Hilfe Fenster bei Tastendruck (F1 bei Win98) Allgemeine Java-Themen 5
T Teile eines Double-Wertes verändern Allgemeine Java-Themen 2
R Rückgabe eines Arrays durch Funktion Allgemeine Java-Themen 9
H Datentypen Typ eines Arrays überprüfen Allgemeine Java-Themen 9
RalleYTN DPI eines Bildes ändern Allgemeine Java-Themen 4
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
K Bestimmten Bereich eines Strings lesen Allgemeine Java-Themen 6
C -Verschiedene Versionen eines Programms verwalten Allgemeine Java-Themen 7
O Datentypen Erstellung eines Containers, der verschachtelte Map-Strukturen beherbergen kann Allgemeine Java-Themen 0
A einmalige Ausführung eines Methodenabschnittes Allgemeine Java-Themen 3
F CPU Last eines Thread ausfindig machen Allgemeine Java-Themen 0

Ähnliche Java Themen


Oben