| |
VB.NET - FortgeschritteneMathematische Umkehrfunktion | | | Autor: Snoopy | Datum: 25.09.11 09:44 |
| Hallo Mathematiker
zur Zeit beschäftige ich mich mal wieder mit dem OpenStreetMap Kartenmaterial. Genauer gesagt, ich baue einen nativen Viewer, der direkt die einzelnen Tiles (Kacheln) der OSM TileServer downloaded, zusammenmontiert und visualisiert. Eine Kachel hat eine Größe von 256 x 256 Pixel.
Dazu wird einer Funktion die Koordinate und den Zoomlevel übergeben. Die Funktion liefert den TileX und TileY Wert zurück, woraus dann die Download-URI erzeugt wird. TileX und TileY sind Double-Werte, die ebenfalls den Offset der Koordinate relativ zur linken oberen Ecke des Tiles beinhalten. Somit kann ich einen exakten Punkt auf der Karte bestimmen. Das funktioniert soweit problemlos. Die Formel dazu kommt aus dem OSM Wiki, bzw. aus den OSM Foren.
http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames
Friend Shared Function LongLatToTile(lon As Double, lat As Double, zoom As _
Integer) As Point
Dim lon_rad As Double = DegreeToRadian(lon)
Dim lat_rad As Double = DegreeToRadian(lat)
Dim n As Double = Math.Pow(2.0, zoom)
Dim tileX As Double = ((lon + 180) / 360) * n
Dim tileY As Double = (1 - (Math.Log(Math.Tan(lat_rad) + 1.0 / Math.Cos( _
lat_rad)) / Math.PI)) * n / 2.0
Return New Point(tileX, tileY)
End Function
Friend Shared Function DegreeToRadian(ByVal degree As Double) As Double
Return (Math.PI / 180) * degree
End Function Beispielsweise liefert die Funktion bei meinem Heimatort mit der Koordinate Longitude=6.06194, Latitude=50.81686, Zoom=16 den Point(33871,5424995556;21992,8524077128) zurück. Wie gesagt, bis hierhin kein Problem.
Aber, wie bekomme ich eine Umkehrfunktion hin, die mir aus TileX, TileY und Zoom wieder eine Koordinate liefert? Ich muss gestehen, dass das meine mathematischen Fähigkeiten übersteigt, denn da habe ich wohl in der Schule gefehlt.
Im OSM Wiki gibt es eine Funktion, die allerdings nur die Koordinate der linken oberen Ecke des Tiles zurückliefert und den Offset dabei nicht berücksichtigt.
Friend Shared Function TileToLongLat(tile_x As Double, tile_y As Double, _
zoom As Integer) As Point
Dim p As Point = New Point()
Dim n As Double = Math.PI - ((2.0 * Math.PI * tile_y) / Math.Pow(2.0, _
zoom))
p.X = CSng((tile_x / Math.Pow(2.0, zoom) * 360.0) - 180.0)
p.Y = CSng(180.0 / Math.PI * Math.Atan(Math.Sinh(n)))
Return p
End Function Ich hoffe, mir kann jemand helfen...
Gru?
---------------------------------------------------
Snoopy sagt - vb@rchiv find ich gut...
Schon gesehen? OSMMapViewer V2 Control | |
Re: Mathematische Umkehrfunktion | | | Autor: Preisser | Datum: 25.09.11 12:02 |
| Hallo,
eine ungefähre Herleitung:
Für die vorletzte Zeile gibt es laut Derive allerdings mehrere Lösungen (da der Tangens periodisch ist), von denen ich mal eine genommen habe, die bei deinem Beispiel wieder die ursprünglichen Koordinaten liefert.
Public Shared Function TileToLongLat(tileX As Double, tileY As Double, zoom _
As Integer) As Point
Dim lon As Double, lat As Double
Dim n As Double = Math.Pow(2.0, zoom)
lon = 360 / n * tileX - 180
lat = (2 * Math.Atan(Math.Pow(Math.E, Math.PI - 2 * Math.PI * tileY / _
n)) - 1 * Math.PI / 2) / Math.PI * 180
Return New Point(lon, lat)
End Function (Point steht hier für eine Structure, bei denen die X- und Y-Koordinaten als Double abgespeichert werden (also nicht System.Windows.Drawing.Point)).
Beitrag wurde zuletzt am 25.09.11 um 12:13:52 editiert. | |
Re: Mathematische Umkehrfunktion | | | Autor: DaveS (Moderator) | Datum: 25.09.11 13:09 |
| Studierst du noch oder machst du etwas Mathematik beruflich? Mit 25 oder so habe ich bemerkt, dass meine Kenntnisse sehr abgenommen hatten, und seitdem habe ich regelmässig gedacht, ich sollte mich mal wieder ein wenig einarbeiten, um alles nicht ganz zu vergessen. Leider ist nichts daraus geworden. Vor ca einem Jahr dachte ich ich würde versuchen Einstein's ART Gleichungen einigermaßen zu verstehen, ich habe vier Bücher aus der McGraw-Hill "DeMystified" Reihe (exzellente Fachbücher) gekauft (Calculus, Linear Algebra, Differential Equations und Relativity - was ART betrifft fängt das Letzgenannte mit einer Einführung in Tensortheorie an...) Es war ziemlich erschreckend wie viel ich nicht mehr wußte. Von Matrizen habe ich zwei Kapitel durch, das ist ziemlich alles bis jetzt. Wenn ich endlich wirklich aufhöre zu arbeiten werde ich natürlich viel mehr Zeit dafür haben (nicht lachen).
________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist | |
Re: Mathematische Umkehrfunktion | | | Autor: Preisser | Datum: 25.09.11 13:18 |
| Hallo,
ja ich studiere noch, allerdings Informatik (Bachelor), da hatte ich Mathe nur im 1. & 2. Semester (bin grade im 5.). Aber ich merke auch schon ab und zu, dass ich einige Sachen wieder vergesse.
Beitrag wurde zuletzt am 25.09.11 um 13:24:52 editiert. | |
Re: Mathematische Umkehrfunktion | | | Autor: DaveS (Moderator) | Datum: 03.10.11 13:50 |
| Nee, meine Internet Verbindung ist nur eine Mobilverbindung und manchmal sehr langsam, oder tut anscheinend manchmal gar nichts (sollte ziemlich schnell sein, laut Werbung...)
Ich weiß jetzt nicht wirklich was ich gerne hätte, müßte mich länger mit dem Thema auseinandersetzen. Ich habe zB gerade festgestellt, dass man in Google maps ein Menü bekommt mit "center map here", trotzdem scheint es irgendwie wegzurutschen wenn man einzoomt, aber vielleicht bin ich nicht genau genug. Ich bin mir aber sicher du schaffst hier wieder was tolles.
________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist | |
Re: Mathematische Umkehrfunktion | | | Autor: Preisser | Datum: 04.10.11 17:49 |
| Hallo,
ja, coole Sache.
Ich muss allerdings gestehen, dass ich die Herleitung nicht komplett gelöst hatte, sondern die Zeile über dem sin = ... mit Derive (Programm) lösen lies, da ich auf die Schnelle nicht wusste, wie man (1+sin(x))/cos(x) nach Tangens auflösen kann.
Beitrag wurde zuletzt am 04.10.11 um 17:49:44 editiert. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats sevZIP40 Pro DLL
Zippen und Unzippen wie die Profis!
Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Weitere Infos
|