Hallo Forum ,
stehe vor einem Problem. Einem Verständnisproblem! Und zwar:
Ich habe gegeben:
-Punkte mit jeweils einer Koordinate (Längen- und Breitengrad)
-Ein Canvas (WPF) mit einer variablen Größen
-Ein Control, welches die Punkte repräsentiert
-Einen Zoomfaktor, also die Kilometeranzahl vom rechten bis zum linken Rand des Canvas (gewissermaßen ein Maßstab)
Das will ich erreichen:
Die Punkte sollen entsprechend geladen werden und unter Berücksichtigung des Zoomfaktors auf dem Canvas in Form der "Punktcontrols" platziert werden.
Wie will ich das erreichen:
Ich errechne aus dem Zoomfaktor und der Canvasgröße die rechte untere und die linke obere Ecke des Canvas in Form von Koordinaten, so dass ich zwei Grenzen habe.
Dann hole ich mir den ersten Punkt aus meiner Sammlung und berechne deren X und Y Punkte in Pixeln mithilfe der zwei Grenzen. Ich platziere das Control mit den entsprechenden X und Y Werten auf dem Canvas. Und so weiter alle Punkte durch.
Das habe ich verstanden:
-Die Welt ist rund und darum brauch man ne Projektion um das in 2D abzubilden.
-Den ganzen WPF Kram
-Wie ich den Zoomfaktor nutze um die Grenzen zu berechnen
Das Problem:
-den X und Y Wert in Pixeln mithilfe der zwei Grenze berechnen
->Speziell: Die ganzen Lösungen im Internet wollen keine Grenzen haben und ich weiß nicht wie ich dann den Punkt errechnen soll, da ich ja nicht die komplette Welt darstellen will, sondern nur Ausschnitte.
Habe das im Internet gefunden:
stackoverflow.com/questions/12…cal-coordinates-to-pixels
Sowie eine Bibliothek:
https://proj4net.codeplex.com/
Speziell: proj4net.codeplex.com/SourceCo…ion/MercatorProjection.cs
Hoffe ihr könnt mir helfen und das Problem nachvollziehen
Liebe Grüße
Julian
stehe vor einem Problem. Einem Verständnisproblem! Und zwar:
Ich habe gegeben:
-Punkte mit jeweils einer Koordinate (Längen- und Breitengrad)
-Ein Canvas (WPF) mit einer variablen Größen
-Ein Control, welches die Punkte repräsentiert
-Einen Zoomfaktor, also die Kilometeranzahl vom rechten bis zum linken Rand des Canvas (gewissermaßen ein Maßstab)
Das will ich erreichen:
Die Punkte sollen entsprechend geladen werden und unter Berücksichtigung des Zoomfaktors auf dem Canvas in Form der "Punktcontrols" platziert werden.
Wie will ich das erreichen:
Ich errechne aus dem Zoomfaktor und der Canvasgröße die rechte untere und die linke obere Ecke des Canvas in Form von Koordinaten, so dass ich zwei Grenzen habe.
Dann hole ich mir den ersten Punkt aus meiner Sammlung und berechne deren X und Y Punkte in Pixeln mithilfe der zwei Grenzen. Ich platziere das Control mit den entsprechenden X und Y Werten auf dem Canvas. Und so weiter alle Punkte durch.
Das habe ich verstanden:
-Die Welt ist rund und darum brauch man ne Projektion um das in 2D abzubilden.
-Den ganzen WPF Kram
-Wie ich den Zoomfaktor nutze um die Grenzen zu berechnen
Das Problem:
-den X und Y Wert in Pixeln mithilfe der zwei Grenze berechnen
->Speziell: Die ganzen Lösungen im Internet wollen keine Grenzen haben und ich weiß nicht wie ich dann den Punkt errechnen soll, da ich ja nicht die komplette Welt darstellen will, sondern nur Ausschnitte.
Habe das im Internet gefunden:
stackoverflow.com/questions/12…cal-coordinates-to-pixels
C#-Quellcode
- public class GoogleMapsAPIProjection
- {
- private readonly double PixelTileSize = 256d;
- private readonly double DegreesToRadiansRatio = 180d / Math.PI;
- private readonly double RadiansToDegreesRatio = Math.PI / 180d;
- private readonly PointF PixelGlobeCenter;
- private readonly double XPixelsToDegreesRatio;
- private readonly double YPixelsToRadiansRatio;
- public GoogleMapsAPIProjection(double zoomLevel)
- {
- var pixelGlobeSize = this.PixelTileSize * Math.Pow(2d, zoomLevel);
- this.XPixelsToDegreesRatio = pixelGlobeSize / 360d;
- this.YPixelsToRadiansRatio = pixelGlobeSize / (2d * Math.PI);
- var halfPixelGlobeSize = Convert.ToSingle(pixelGlobeSize / 2d);
- this.PixelGlobeCenter = new PointF(
- halfPixelGlobeSize, halfPixelGlobeSize);
- }
- public PointF FromCoordinatesToPixel(PointF coordinates)
- {
- var x = Math.Round(this.PixelGlobeCenter.X
- + (coordinates.X * this.XPixelsToDegreesRatio));
- var f = Math.Min(
- Math.Max(
- Math.Sin(coordinates.Y * RadiansToDegreesRatio),
- -0.9999d),
- 0.9999d);
- var y = Math.Round(this.PixelGlobeCenter.Y + .5d *
- Math.Log((1d + f) / (1d - f)) * -this.YPixelsToRadiansRatio);
- return new PointF(Convert.ToSingle(x), Convert.ToSingle(y));
- }
- public PointF FromPixelToCoordinates(PointF pixel)
- {
- var longitude = (pixel.X - this.PixelGlobeCenter.X) /
- this.XPixelsToDegreesRatio;
- var latitude = (2 * Math.Atan(Math.Exp(
- (pixel.Y - this.PixelGlobeCenter.Y) / -this.YPixelsToRadiansRatio))
- - Math.PI / 2) * DegreesToRadiansRatio;
- return new PointF(
- Convert.ToSingle(latitude),
- Convert.ToSingle(longitude));
- }
- }
Sowie eine Bibliothek:
https://proj4net.codeplex.com/
Speziell: proj4net.codeplex.com/SourceCo…ion/MercatorProjection.cs
Hoffe ihr könnt mir helfen und das Problem nachvollziehen
Liebe Grüße
Julian
Hmkay.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „jedijaeger“ ()