Himmelsrichtung/Winkel von Punkt A zu Punkt B errechnen

Allgemeine Fragen zu GPS und verwandten Themen

Moderator: Roland

Antworten
y0dA
Beiträge: 21
Registriert: 25.01.2008 - 11:38

Himmelsrichtung/Winkel von Punkt A zu Punkt B errechnen

Beitrag von y0dA » 28.03.2008 - 12:11

Hallo!
Hoffe dass das Thema in dieses Forum passt.

Also ich möchte wissen wie Punkt B (bspw. Berlin) zu Punkt A (bspw München) steht, also wie die Himmelsrichtung ausgehend von Punkt A zu Punkt B ist.

Hierzu habe ich folgendes versucht (Oracle Funktion):

Code: Alles auswählen

create or replace function getAngle(
  p1 sdo_geometry,
  p2 sdo_geometry
) return number
is
  v_dx number;
  v_dy number;
  v_distance number;

  v_angle number;
begin
  v_dx := p2.sdo_point.x - p1.sdo_point.x;
  v_dy := p2.sdo_point.y - p1.sdo_point.y;

  v_distance := sqrt(v_dx * v_dx + v_dy * v_dy);
  v_angle := acos(v_dy / v_distance) * 360 / 6.28;
  return v_angle;
Für jene die Oracle Spatial nicht kennen, sdo_geometry ist in diesem Fall einfach ein Punkt mit einer x und einer y Koordinate (ist eh ersichtlich).

Wenn ich dann die Funktion füttere, sieht das Ergebnis wie folgt aus:

Code: Alles auswählen

select
  GETANGLE(
    SDO_GEOMETRY(2001, 8307, SDO_POINT_TYPE(11.57917, 48.13842, NULL), NULL, NULL), --münchen
    SDO_GEOMETRY(2001, 8307, SDO_POINT_TYPE(13.45742, 52.58146, NULL), NULL, NULL) -- berlin
  ) as winkel
from dual

Ergebnis = 22,9273401512935 

select
  GETANGLE(
    SDO_GEOMETRY(2001, 8307, SDO_POINT_TYPE(13.45742, 52.58146, NULL), NULL, NULL),
     SDO_GEOMETRY(2001, 8307, SDO_POINT_TYPE(11.57917, 48.13842, NULL), NULL, NULL)
  ) as winkel
from dual
Ergebnis = 157,163958462134
Und hier liegt das Problem, beim ersten Select bekomme ich ja ~23 raus und dies würde auch passen, da von München ausgehend, Berlin ungefähr in diesem Winkel liegt --> also ganz grob Berlin Nordöstlich von München liegt.

Nur beim 2ten Statement bekomme ich einen Wert von ~157 Grad raus, und wenn man dem vorherigen Stmt glaubt, dann müsste nun München Südöstlich von Berlin liegen --> ist aber falsch(?), auf Karten liegt München eher Südwestlich.

Weiß jemand Rat oder kennt eine Berechnung mit der ich das gewünschte Ziel bekomme? Ich glaube dass mir meine Berechnung nur einen Winkel zwischen 0 und 180 Grad liefert und ich weiß nicht so recht wie ich hierbei weiter vorgehen soll damit ich auch die Grade jenseits davon bekomme.

Also Ziel wäre eine Berechnung die mir folgende Ergebnisse liefert (wenn jene stimmen):
Berlin liegt Nordöstlich von München (was meine Berechnun ausspucken würde)
München liegt Südwestlich von Berlin (dieses Ergebnis bekomme ich mit meiner Berechnung nicht).

y0dA
Beiträge: 21
Registriert: 25.01.2008 - 11:38

Re: Himmelsrichtung/Winkel von Punkt A zu Punkt B errechnen

Beitrag von y0dA » 28.03.2008 - 13:53

Hab das Problem wie folgt gelöst:

Code: Alles auswählen

create or replace function GETANGLE(
  p1 sdo_geometry,
  p2 sdo_geometry
) return number
is
  v_dx number;
  v_dy number;
  v_distance number;

  v_angle number;
begin
  v_dx := p2.sdo_point.x - p1.sdo_point.x;
  v_dy := p2.sdo_point.y - p1.sdo_point.y;

  v_distance := sqrt(v_dx * v_dx + v_dy * v_dy);
  v_angle := acos(v_dy / v_distance) * 360 / 6.28;
  if v_dx < 0 then v_angle := -v_angle; end if; 
  return v_angle;
end;


Benutzeravatar
Roland
Beiträge: 2054
Registriert: 18.02.2004 - 22:33
Wohnort: Wusterhausen(Dosse)

Re: Himmelsrichtung/Winkel von Punkt A zu Punkt B errechnen

Beitrag von Roland » 28.03.2008 - 21:17

Hallo,
Hab das Problem wie folgt gelöst:
fast ...
Jetzt steige ich nicht ins Detail ein, ich erzähle dafür meine alte Geschichte, dass mein Programm "Richtungswinkel und Entfernung" mal zwei Seiten gefüllt hat (vielleicht war's nur eine ...).

- Man hat vier Quadranten zum Abfragen
- man muss mehrfach das Teilen durch Null abfangen
- man muss fragen "Sind die Punkte A und B evtl. identisch?"
- Was ist mit dem sphärischen Exzess ?
- usw.usf.


Grüße Roland

marc
Beiträge: 3
Registriert: 15.02.2008 - 16:13
Wohnort: Kempten

Re: Himmelsrichtung/Winkel von Punkt A zu Punkt B errechnen

Beitrag von marc » 28.04.2008 - 17:05

hallo,

ich habe das problem in java gelöst und hoffe die lösung ist so richtig


private static String getWinkel(double x1, double y1, double x2, double y2) throws Exception {

String winkel = "0";
double hilf = 0;

if ((x1 == x2) && (y1 == y2)) {
winkel = "kein winkel";
} else {
if (x1 == x2) {
if (y2 > y1) {
winkel = "0";
} else {
winkel = "180";
}
} else {
if (x2 > x1) {
// hier block 1
if (y2 == y1) {
winkel = "90";
} else {
if (y2 > y1) {
hilf = Math.atan(((x2 - x1) / (y2 - y1))) * 180 / Math.PI;
winkel = String.valueOf((Math.round(hilf / 10)) * 10);
} else {
hilf = Math.atan(((y1 - y2) / (x2 - x1))) * 180 / Math.PI + 90;
winkel = String.valueOf((Math.round(hilf / 10)) * 10);
}
}
} else {
// hier block 2
if (y2 == y1) {
winkel = "270";
} else {
if (y2 < y1) {
hilf = Math.atan(((x1 - x2) / (y1 - y2))) * 180 / Math.PI + 180;
winkel = String.valueOf((Math.round(hilf / 10)) * 10);
} else {
hilf = Math.atan(((y2 - y1) / (x1 - x2))) * 180 / Math.PI + 270;
winkel = String.valueOf((Math.round(hilf / 10)) * 10);
}
}
}
}
}

if (winkel.equals("360")) {
winkel = "0";
}

return winkel;

}

Benutzeravatar
Roland
Beiträge: 2054
Registriert: 18.02.2004 - 22:33
Wohnort: Wusterhausen(Dosse)

Re: Himmelsrichtung/Winkel von Punkt A zu Punkt B errechnen

Beitrag von Roland » 28.04.2008 - 21:59

Hallo,

was, meine Ratschläge wurden ernst genommen :shock:
Wenn ich den roten Filzstift gefunden habe, werde ich einen Kringel im Kalender machen.

Erkenne trotz der häßlichen Syntax :twisted: einiges wieder. (Lass Dich nicht abschrecken).
Ich hatte als Sahnehäubchen noch die Strecke drin.


Nachtrag:
Mit einem Code-Kopfteil, In- und Outputroutinen und der Wahl zwischen örtlichem und GK-System (UTM gab's damals noch nicht) bin ich vielleicht wirklich auf zwei Seiten gekommen.


Grüße Roland

Antworten