WPF 2010 Статическая карта - PullRequest
       2

WPF 2010 Статическая карта

0 голосов
/ 20 сентября 2010

Я создаю приложение WPF в .net 4.0.

По сути, я хочу иметь карту мира (2d), на которой я могу размещать изображения в зависимости от их страны.Эта карта может быть изображением, однако, было бы трудно определить координаты для правильного местоположения?

Может кто-нибудь предоставить мне самый простой способ сделать это?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2010

Есть много решений для этого, все в зависимости от вашего дизайна (и вкусов).

Во всех случаях следует помнить, что расположение элементов на карте всегда будет соответствовать размеру карты, и его необходимо будет пересчитывать всякий раз, когда изменяется размер фоновой карты. Это вычисление будет зависеть от самой карты (то есть является ли она прямоугольником или круглой, является ли широта / долгота фиксированной и равной сеткой, расположение карты и т. Д.).

Один из возможных способов настройки главного окна - что-то вроде этого:

Предполагается, что существует папка «Ресурсы», которая содержит изображение с именем «world-map.jpg», в котором для параметра «Действие сборки» установлено значение «Ресурс».

Тогда в вашем коде позади вас должно быть что-то, что фактически добавляет новое изображение на карту в соответствующем месте.

Лично я, вероятно, создал бы класс (возможно, пользовательский или пользовательский элемент управления) для хранения информации об изображении, включая широту / долготу, объект Image и т. Д. Главное окно (или ViewModel) будет иметь коллекцию этих объекты, которые облегчили бы их размещение в нужных местах при изменении размера. Например:

public partial class Window1 : Window 
{
    ObservableCollection<MyMapImageClass> mapImages = new ObservableCollection<MyMapImageClass>();

    public Window1()
    {
        InitializeComponent();
        layout.SizeChanged += new SizeChangedEventHandler(layout_SizeChanged);
    }

    void layout_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        foreach (MyMapImageClass mapImage in mapImages)
        {
             Point point = CalculateImagePosition(mapImage.latitude, mapImage.longitude);
             mapImage.Image.SetValue(Canvas.LeftProperty, point.X);
             mapImage.Image.SetValue(Canvas.TopProperty, point.Y);
        }
    }

    Point CalculateImagePlacement(double latitude, double longitude)
    {
        Point point = new Point();

        // Do the calculations appropriate to your map
        point.X = LongCalculation(longitude);
        point.Y = LatCalculation(latitude);
    }


    void PlaceImage(double latitude, double longitude)
    {
        Image img = new Image();
        ImageSourceConverter converter = new ImageSourceConverter();
        string path = "pack://application:,,,/Resources/SomeImage.png";
        ImageSource source = (ImageSource)converter.ConvertFromString(path);
        img.Source = source;
        img.Width = 10d;

        Point point = CalculateImagePlacement(latitude, longitude);

        img.SetValue(Canvas.LeftProperty, point.X);
        img.SetValue(Canvas.TopProperty, point.Y);

        layout.Children.Add(img);

        MyMapImageClass mapImage = new MyMapImageClass();
        mapImage.Latitude = latitude;
        mapImage.Longitude = longitude;
        mapImage.Image = img;
        mapImages.Add(mapImage);
    }
}
0 голосов
/ 20 сентября 2010

Я бы сделал это, поместив объект изображения / фигуры на панель холста (панель с системой координат), а также добавил бы wpf toolkit zoomviewer, чтобы получить хорошее панорамирование и масштабирование карты.

Тогда я бы сделал словарь, в котором ключ - это название страны, а значение - это точка, в которой должны быть размещены картинки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...