yandexmobile / yandexmapkit-wp

Yandex Map Kit for Windows
17 stars 2 forks source link

как вычислить координаты текущего окна? #12

Closed a-klimashevsky closed 11 years ago

a-klimashevsky commented 11 years ago

у карты есть свойство PlainViewPort, но как его координаты преобразовать в геокоординаты?

a-klimashevsky commented 11 years ago

Так же хотелось бы узнать обработчик перемещения карты или сметы зума

teshca commented 11 years ago

Для преобразования ViewPort в координаты следует воспользоваться методом ViewportPointToCoordinates Например для получения координат верхнего левого угла карты: map.ViewportPointToCoordinates(new Media.Point(map.PlainViewPort.Top, map.PlainViewPort.Left)

Если вам необходимо следить за обновлением ViewPort то в таком случае следует использовать событие OperationStatusChanged, с проверкой OperationStatus.Idle Например вот так:

    private void MapOperationStatusChanged(object sender, OperationStatusChangedEventArgs e)
    {
        if (e.OperationStatus == OperationStatus.Idle)
        {
            Debug.WriteLine(map.ViewportPointToCoordinates(new Media.Point(map.PlainViewPort.Top, map.PlainViewPort.Left)));
        }
    }
a-klimashevsky commented 11 years ago

Я использую следующий код: p1 и p2 имеют различные координаты. а вот topRight и bottomLeft - одинаковые. Тестировал на эмуляторе 8.0

private void map_OperationStatusChanged(object sender, OperationStatusChangedEventArgs e)
    {
        if (e.OperationStatus == OperationStatus.Idle)
        {
            var viewPort = map.PlainViewPort;
            var p1 = new Point(viewPort.Top, viewPort.Right);
            var p2 = new Point(viewPort.Bottom, viewPort.Left);
            var topRight = map.ViewportPointToCoordinates(p1);
            var bottomLeft = map.ViewportPointToCoordinates(p2);
        }
    }
teshca commented 11 years ago

Не правильно вам написал. ViewportPointToCoordinates переводит экранные точки в координаты. Отсчёт экранных точек происходит от верхнего левого угла видимой области карты. Для получения координат topLeft нужно передать в качестве аргумента точку (0,0) Для получения координат BottomRight нужно передать в качестве аргумента точку (map.Viewport.Width, map.Viewport.Height). Свойство PlainViewPort в этой ситуации не нужно.