Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

Grade zu metern umwandeln

Rechnen mit Koordinaten und signifikanten Stellen.

Moderator: moenk

Antworten
Javier
Geonewbie
Beiträge: 2
Registriert: Mo 12. Sep 2005, 15:50
Wohnort: Spanien

Grade zu metern umwandeln

Beitrag von Javier »

Ich möchtegerne wissen wie ich den abstand (in metern) zwishen zwei Längegräden berechnen kann. Ich weiss dass ich sie auf dem Äquator so berechnen kann:

distanz= Erdradius*2*sin(graden/2)

Aber wie mache ich es wenn ich mich nicht auf dem Äquator befinde? Soll ich dan die gleiche formel benützen und dann sie mal cos(Breitengrad) multiplizieren?

Vielen Dank

Javier
Benutzeravatar
El Achimo
Geocacher
Beiträge: 28
Registriert: Di 8. Feb 2005, 20:04
Kontaktdaten:

Beitrag von El Achimo »

Hi,
schau mal hier nach:
http://www.koordinaten.de/online/formel.shtml
Viele Grüße,
El Achimo
KajakFun
Geowizard
Beiträge: 1034
Registriert: Mi 15. Dez 2004, 21:38
Wohnort: 78224 Singen

Beitrag von KajakFun »

"Aber wie mache ich es wenn ich mich nicht auf dem Äquator befinde? Soll ich dan die gleiche formel benützen und dann sie mal cos(Breitengrad) multiplizieren? "

Im Prinzip rchtig.
1/60 Grad =1 Meile =1,86 km in Nord Süd Richtung
Da die Längengrade nach Norden dichter zusammenrücken gilt
1/60 Grad = 1.86 km * cos(Breitengrad) z.B. bei 48 Grad = 1,24 km

Bei N Grad.MM.MMM Darstellung entspricht eine Tausendstel Breitengraddifferenz 1,86 Meter bzw.
Bei E Grad.MM.MMM entspricht eine Tausendstel Differenz ca. 1,24 Meter (bei 48 Grad Breite) in Ost-West Richtung
KM Distanz zwischen 2 Punkten hinreichend genau mit Pythagoras = Wurzel(Meter NordDiff^2+Meter Ostdiff.^2)

Man kann aber auch auf Gauss Krüger Koordinaten umstellen dann sind die Differenzen direkt in Meter . :D :wink:
Benutzeravatar
Sir Cachelot
Geoguru
Beiträge: 4021
Registriert: Mo 21. Jun 2004, 17:03
Wohnort: Schweiz

Beitrag von Sir Cachelot »

ach was alle quatsch :wink:
einfach im gerät das system auf utm umstellen.
da sind die werte noch metriger.
There are 10 kinds of people in this world. Those who understand binary and those who don't.
tobbes
Geocacher
Beiträge: 182
Registriert: So 9. Jan 2005, 11:15
Wohnort: Aachen

Beitrag von tobbes »

Hallo,
ich würde schon gerne wissen wozu Du das brauchst? Zum Segeln?
Nach kurzer Literatur Befragung (hab mir mal ein Buch gekauft!):
Ja Du hast wohl recht.

Abstand zwischen den Minutenfeldern:
geographische Breite:
Abstand = 1,852 km (eine Seemeile)

geographische Länge:
Abstand = 1,852 * cosB(Breite)

Quelle:Manfred Feller/ Auf Tour mit dem GPS-Empfänger

Gruß Tobbes
Javier
Geonewbie
Beiträge: 2
Registriert: Mo 12. Sep 2005, 15:50
Wohnort: Spanien

Beitrag von Javier »

Vilen Dank.

Eure Ratschläge waren sehr nützlich. Aber die resultate sind nich so herausgekommen als ich sie erwartet hatte.
Ich brauche es um den Abstand zwischen zwei parallel gefahrene Spuren zu berechnen.

Ich weiss dass am besten wäre es wenn ich UTM Koordinate hätte aber die waren schon in WGS84gegeben also konnte ich mein Gerät nicht zu UTM umstellen. Da ich etwa 10000 punkte habe kann ich die Korrdinate nicht 1 für 1 umwandeln und da ich cm genaue resultate brauche muss ich eine sehr zuverlässige software finden.

Kennt ihr irgend so eine. Es ist wichtig dass ich viele punkte auf mal eingeben kann. Vieleicht könntet ihr mirauch sagen welcher Geoid am besten für Deutschland passt.

Ich bedanke mich nochmals.

Javier
Benutzeravatar
Neuromancer2K4
Geomaster
Beiträge: 390
Registriert: Di 3. Aug 2004, 12:35
Wohnort: 82110 Germering
Kontaktdaten:

Beitrag von Neuromancer2K4 »

Hallo Javier,

Üblicherweise wird für eine Berechnung dieser Art die Haversine Formel verwendet.
Ein entsprechendes JavaScript und eine Erklärung der Formel ist hier zu finden:
http://www.movable-type.co.uk/scripts/LatLong.html

Diese lautet:

R = earth’s radius (mean radius = 6,371km)
Δlat = lat2 − lat1
Δlong = long2 − long1
a = sin²(Δlat/2) + cos(lat1).cos(lat2).sin²(Δlong/2)
c = 2.atan2(√a, √(1−a))
d = R.c

allerdings geht diese zunächst von einem Kugelmodell aus.
wenn Du nun mit dem entsprechenden Ellipsoid-Modell z.B. WGS1984 arbeitets, oder auch einem beliebigen anderen, müssen dir die entsprechenden Parameter (Equatorial-Radius, Polar-Radius, Eccentricity und Flattening) bekannt sein (bzw. errechnet werden.)

Dann kannst Du mit einer Annäherung des Kurven-Radius am Delta der beiden Koordinaten ein schon sehr genaues Ergebnis erhalten

Damit ist eine Genauigkeit von 0.1% möglich.

Wenn es noch genauer werden soll, gibt es noch die Vincenty-Formel:
http://www.movable-type.co.uk/scripts/L ... centy.html

a, b = major & minor semiaxes of the ellipsoid
f = flattening (a−b)/a
φ1, φ2 = geodetic latitude
L = difference in longitude
U1 = atan((1−f).tanφ1)
U2 = atan((1−f).tanφ2)
λ = L, λ′ = 2π
while abs(λ−λ′) > 10-12 {
sinσ = √[ (cosU2.sinλ)² + (cosU1.sinU2 − sinU1.cosU2.cosλ)² ]
cosσ = sinU1.sinU2 + cosU1.cosU2.cosλ
σ = atan2(sinσ, cosσ)
α = asin(cosU1.cosU2.sinλ / sinσ)
cos2σm = cosσ − 2.sinU1.sinU2/cos²α
C = f/16.cos²α.[4+f.(4−3.cos²α)]
λ′ = λ
λ = L + (1−C).f.sinα.{σ+C.sinσ.[cos2σm+C.cosσ.(−1+2.cos²2σm)]}
}
u² = cos²α.(a²−b²)/b²
A = 1+u²/16384.{4096+u².[−768+u².(320−175.u²)]}
B = u²/1024.{256+u².[−128+u².(74−47.u²)]}
Δσ = B.sinσ.{cos2σm+B/4.[cosσ.(−1+2.cos²2σm) − B/6.cos2σm.(−3+4.sin²σ).(−3+4.cos²2σm)]}
s = b.A.(σ−Δσ)


Im WGS1984 ist das Ellipsoid Modell:
a = 6 378 137 m
b = 6 356 752.3142 m
f = 1 / 298.257223563

Wichtig und zu beachten ist in jedem Fall, dass du einen möglichst genauen Wert für PI verwenden musst, wenn du die Grad-Werte in Radianten umwandelst.

Ausserdem musst Du noch beachten, dass Du mit Fließkommazahlen doppelter genauigkeit rechnen musst, um rundungsfehler so klein wie möglich zu halten.

Ich habe die Formel noch ein wenig optimiert, um redundante Berechnungen von Sin/Cos/Tan/... zu vermeiden:

In VB.NET sieht das ganze dann so aus:

Code: Alles auswählen


        Private Const epsilon As System.Double = 0.000000000000001

        Public Const DoublePI As System.Double = Math.PI * 2.0


        Public Shared Function DistanceBetween(ByVal start As Position, ByVal destination As Position, ByVal ellipsoid As Ellipsoid) As Distance
            Dim result As Distance

            Try
                If start.Equals(destination) Then
                    result = Distance.Empty
                Else

                    Dim lat1 As System.Double = start.Latitude.ToRadians.Value
                    Dim lon1 As System.Double = start.Longitude.ToRadians.Value
                    Dim lat2 As System.Double = destination.Latitude.ToRadians.Value
                    Dim lon2 As System.Double = destination.Longitude.ToRadians.Value
                    Dim semiMajorAxis As System.Double = ellipsoid.SemiMajorAxis.ToKilometers.Value
                    Dim semiMinorAxis As System.Double = ellipsoid.SemiMinorAxis.ToKilometers.Value
                    Dim flattening As System.Double = ellipsoid.Flattening

                    Dim L As System.Double = lon2 - lon1

                    Dim U1 As System.Double = Math.Atan((1 - flattening) * Math.Tan(lat1))
                    Dim U2 As System.Double = Math.Atan((1 - flattening) * Math.Tan(lat2))

                    Dim sinU1 As System.Double = Math.Sin(U1)
                    Dim cosU1 As System.Double = Math.Cos(U1)
                    Dim sinU2 As System.Double = Math.Sin(U2)
                    Dim cosU2 As System.Double = Math.Cos(U2)

                    Dim lambda As System.Double = L
                    Dim lambdaP As System.Double = DoublePI

                    Dim iterLimit As System.Int32 = 20

                    Dim sigma As System.Double
                    Dim sinSigma As System.Double
                    Dim cosSigma As System.Double

                    Dim sinLambda As System.Double
                    Dim cosLambda As System.Double

                    Dim alpha As System.Double
                    Dim cosSqAlpha As System.Double
                    Dim cos2SigmaM As System.Double

                    Dim C As System.Double

                    While (Math.Abs(lambda - lambdaP) > epsilon) And (iterLimit > 0)
                        iterLimit -= 1

                        sinLambda = Math.Sin(lambda)
                        cosLambda = Math.Cos(lambda)

                        sinSigma = Math.Sqrt((cosU2 * sinLambda) * (cosU2 * sinLambda) + (cosU1 * sinU2 - sinU1 * cosU2 * cosLambda) * (cosU1 * sinU2 - sinU1 * cosU2 * cosLambda))
                        cosSigma = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda
                        sigma = Math.Atan2(sinSigma, cosSigma)

                        alpha = Math.Asin(cosU1 * cosU2 * sinLambda / sinSigma)
                        cosSqAlpha = Math.Cos(alpha) * Math.Cos(alpha)
                        cos2SigmaM = cosSigma - 2.0 * sinU1 * sinU2 / cosSqAlpha

                        C = flattening / 16.0 * cosSqAlpha * (4.0 + flattening * (4.0 - 3.0 * cosSqAlpha))
                        lambdaP = lambda
                        lambda = L + (1.0 - C) * flattening * Math.Sin(alpha) * (sigma + C * sinSigma * (cos2SigmaM + C * cosSigma * (-1.0 + 2.0 * cos2SigmaM * cos2SigmaM)))
                    End While

                    If (iterLimit = 0) Then
                        result = Distance.Empty
                    Else
                        Dim uSq As System.Double = cosSqAlpha * (semiMajorAxis * semiMajorAxis - semiMinorAxis * semiMinorAxis) / (semiMinorAxis * semiMinorAxis)
                        Dim A As System.Double = 1.0 + uSq / 16384.0 * (4096.0 + uSq * (-768.0 + uSq * (320.0 - 175.0 * uSq)))
                        Dim B As System.Double = uSq / 1024.0 * (256.0 + uSq * (-128.0 + uSq * (74.0 - 47.0 * uSq)))
                        Dim deltaSigma As System.Double = B * sinSigma * (cos2SigmaM + B / 4.0 * (cosSigma * (-1.0 + 2.0 * cos2SigmaM * cos2SigmaM) - B / 6.0 * cos2SigmaM * (-3.0 + 4.0 * sinSigma * sinSigma) * (-3.0 + 4.0 * cos2SigmaM * cos2SigmaM)))
                        Dim s As System.Double = semiMinorAxis * A * (sigma - deltaSigma)

                        result = New Distance(s, DistanceUnit.Kilometers)
                    End If

                End If
            Catch ex As Exception
                Throw ex
            End Try

            Return result
        End Function
Mit hilfe dieser Formel kannst Du den Abstand auf 1 mm genau berechnen (allerdings leider mit kleinen abweichungen durch rundungsfehler)
Benutzeravatar
De Ryckswimmers
Geocacher
Beiträge: 253
Registriert: Mo 15. Aug 2005, 08:29
Wohnort: 17491 Greifswald

Beitrag von De Ryckswimmers »

:shock: :roll: boahhhh, also quasi Allgemeinwissen..... :shock: :roll: :wink: :wink: :wink:
Viele Grüße Lutz Bild Bild
goldensurfer
Geoguru
Beiträge: 3227
Registriert: Di 12. Okt 2004, 09:41
Wohnort: Fürth
Kontaktdaten:

Beitrag von goldensurfer »

Hallo,
wenn Du Dich ein bisschen mit JavaScript auskennst, schau mal hierhin. (Seite aufrufen und Quelltext anzeigen; der entsprechende JScript-Code steht direkt in der Seite)
Selbiges gibt's übrigens dort auch nochmal für die wegpunktprojektion - braucht man auch oft.
eCiao Bild
Ralf aka goldensurfer

Bild Hardcoreprogrammierer verwechseln Weihnachten mit Halloween, weil: OCT 31 == DEC 25
Antworten