/// <summary><para>Die Methode gibt zusätzlich zur <see cref="Area(Info.MapDirection, bool)"/>-Methode den Bildpunkt (x/y) /// auf dem Satellitenbild zurück, der der Koordinate entspricht.</para></summary> /// /// <param name="direction">Bestimmt die Richtung in der die Bilder zusammengefügt werden sollen.</param> /// <param name="extended">Wenn True, wird ein erweiterter Umgebungsbereich geladen.</param> /// <param name="pointInArea">Der out-Parameter gibt den Bildpunkt der Koordinate im Umgebungsbild zurück.</param> /// <returns>Ein zusammengesetztes Bild vom Typ <see cref="System.Drawing.Image"/></returns> public Image Area(Info.MapDirection direction, bool extended, out GeoUtility.GeoSystem.Helper.GeoPoint pointInArea) { GeoUtility.GeoSystem.Helper.GeoPoint gp = Parent.TileInfo.GeoPosition; pointInArea = new GeoUtility.GeoSystem.Helper.GeoPoint(); pointInArea.X = gp.X; pointInArea.Y = gp.Y; if ((direction == Info.MapDirection.Northwest) || (direction == Info.MapDirection.North) || (direction == Info.MapDirection.West) || (direction == Info.MapDirection.Center)) { pointInArea.X += TILE_SIZE; pointInArea.Y += TILE_SIZE; } if ((direction == Info.MapDirection.Northeast) || (direction == Info.MapDirection.East)) { pointInArea.Y += TILE_SIZE; } if ((direction == Info.MapDirection.Southwest) || (direction == Info.MapDirection.South)) { pointInArea.X += TILE_SIZE; } if (extended == true) { pointInArea.X += TILE_SIZE; pointInArea.Y += TILE_SIZE; } return(Area(direction, extended)); }
/// <summary><para>Die überladene Funktion <see cref="Load(int, bool)"/> lädt das Satellitenbild, welches durch das aktuelle /// <see cref="MapService"/>-Objekt definiert ist. Es wird ein Bild in der Größe der übergebenen Parameter /// zurückgegeben. Eventuell auftretende Exceptions werden unterdrückt.</para></summary> /// /// <example> /// Das folgende Beispiel zeigt die Verwendung der Funktion. Der Beispielcode verwendet ein /// <strong>PictureBox</strong>-Steuerelement zur Anzeige des Bildes. /// <code> /// using System.Drawing; /// using GeoUtility.GeoSystem; /// Geographic geo = new Geographic(8.12345, 50.56789); /// MapService.Info.MapServer server = MapService.Info.MapServer.VirtualEarth; /// MapService map = new MapService(geo, server); /// map.Zoom = 15; /// Image img = map.Image.Load(200, 200); /// picturebox.Image = img; /// </code> /// </example> /// <param name="size">Größe des zurückgegebenen Bildes in Pixel (20 - 2000)</param> /// <param name="mark">Position markieren</param> /// <returns>Ein Bild vom allgemeinen Typ <see cref="System.Drawing.Image"/>.</returns> public Image Load(int size, bool mark) { if (size < 20) { size = 20; } else if (size > 2000) { size = 2000; } Image image = null; Image sizedImage = new Bitmap(size, size); if (Parent.Center == true) { image = Load(true, 0, true); } else { image = Load(this.Parent.Tile, true); } if (image != null) { Graphics graph = Graphics.FromImage(sizedImage); Rectangle destRect = new Rectangle(0, 0, size, size); Rectangle sourceRect = new Rectangle(0, 0, image.Width, image.Height); graph.DrawImage(image, destRect, sourceRect, GraphicsUnit.Pixel); if (mark == true) { int markSize = 2; if (Parent.Zoom >= 18) { markSize = 14; } else if (Parent.Zoom >= 15) { markSize = 12; } else if (Parent.Zoom >= 12) { markSize = 10; } else if (Parent.Zoom >= 9) { markSize = 8; } else if (Parent.Zoom >= 6) { markSize = 6; } else if (Parent.Zoom >= 3) { markSize = 4; } double ratio = (double)size / (double)TILE_SIZE; markSize = Convert.ToInt32((double)markSize * ratio); if (markSize == 0) { markSize = 2; } GeoSystem.Helper.GeoPoint point = Parent.TileInfo.GeoPosition; if (Parent.Center == true) { point = new GeoUtility.GeoSystem.Helper.GeoPoint(TILE_SIZE / 2, TILE_SIZE / 2); } int left = Convert.ToInt32((double)point.X * ratio) - markSize / 2; int top = Convert.ToInt32((double)point.Y * ratio) - markSize / 2; Rectangle rect = new Rectangle(left, top, markSize, markSize); Pen pen = new Pen(Color.Red, 1); graph.DrawRectangle(pen, rect); } return(sizedImage); } return(null); }