Exemple #1
0
                /// <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));
                }
Exemple #2
0
                /// <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);
                }