Határozzuk iránytű irányba az egyik Lat / lon, hogy a másik

szavazat
0

Van valakinek egy algoritmus segítségével határozza meg az irányt az egyik lat / lon egy másik (pszeudo-kód):

CalculateHeading( lat1, lon1, lat2, long2 ) returns string heading

Amennyiben fejléc pl NW, SW, E, stb

Alapvetően két pontot a térképen, és azt akarom, hogy egy általános képet az irányt figyelembe véve, hogy 50 mérföldre keletre, és egy mérföldre észak-keleti egyszerűen nem Northeast.

A kérdést 09/07/2010 05:44
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
2

Emlékszel az trigonometrikus függvények? Ie SOHCAHTOA:

  • SOH : Sin (θ) = Szemben fölött átfogója
  • CAH : Cos (θ) = Szomszédos fölött átfogója
  • TOA : Tan (θ) = Szemben több szomszédos

A pszeudo-kód:

function getDir(lat1, long1, lat2, long2) {
    margin = π/90; // 2 degree tolerance for cardinal directions
    o = lat1 - lat2;
    a = long1 - long2;
    angle = atan2(o,a);

    if (angle > -margin && angle < margin):
            return "E";
    elseif (angle > π/2 - margin && angle < π/2 + margin):
            return "N";
    elseif (angle > π - margin && angle < -π + margin):
            return "W";
    elseif (angle > -π/2 - margin && angle < -π/2 + margin):
            return "S";
    }
    if (angle > 0 && angle < π/2) {
        return "NE";
    } elseif (angle > π/2 && angle < π) {
        return "NW";
    } elseif (angle > -π/2 && angle < 0) {
        return "SE";
    } else {
        return "SW";
    }
}

Szerkesztése 1: Pete és Dean rámutatott, ez nem veszi figyelembe a Föld görbületét. A pontosabb számítások pont van az Egyenlítőtől, akkor kell használni , gömb alakú háromszög képletek , használt Dean választ.

Szerkesztés 2: Tovább korrekció; Pete megjegyezte, arctan()nem ad a megfelelő szögek, mint -1 / -1 és 1/1 azonos (mint például a -1/1 és 1 / -1). arctan2(y, x)egy két érv variációja arctan(), amelyet arra terveztek, hogy kompenzálja ezt. arctan()egy sor (-π, π], pozitív y >= 0és negatív y < 0.

Válaszolt 09/07/2010 05:51
a forrás felhasználó

szavazat
0

Átalakítás numerikus szög és az eredményt, hogy néz ki a szöveget. Például -22,5 .. + 22,5 = N. + 22.5..67.5 = NE, 67.5..112.5 = E, stb Persze, ez feltételezve, amit használ csak É, ÉK, K, DK, D, DNY , NY, ÉNY - ha úgy dönt, (például), hogy menjen el a régi „32 pont az iránytű”, szöveges tartalmak nyilvánvalóan kevésbé jelent tartományban.

Válaszolt 09/07/2010 05:51
a forrás felhasználó

szavazat
16

Ez a honlap az az alap algoritmus:

// in javascript, not hard to translate...
var y = Math.sin(dLon) * Math.cos(lat2);
var x = Math.cos(lat1)*Math.sin(lat2) -
        Math.sin(lat1)*Math.cos(lat2)*Math.cos(dLon);
var brng = Math.atan2(y, x).toDeg();

FRISSÍTVE: Lásd itt teljes algoritmussal Mapping Math és a JavaScript

Hogy kapsz egy számot 0 és 360, akkor ez csak egy kérdés, amelynek egyszerű keresés:

var bearings = ["NE", "E", "SE", "S", "SW", "W", "NW", "N"];

var index = brng - 22.5;
if (index < 0)
    index += 360;
index = parseInt(index / 45);

return(bearings[index]);

Fontos megjegyezni, hogy a csapágy is változik, ahogy mozog a Föld körül. A fenti algoritmus megmutatja a kezdeti csapágy, de ha utazik a távolsági, a csapágy, hogy szignifikánsan különbözik, ha a célállomás eléréséhez (ha csak utazik rövid távolságra [<néhány száz kilométert], akkor valószínűleg nyert „t megváltoztatni ahhoz, hogy aggodalomra ad okot).

Válaszolt 09/07/2010 05:56
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more