Хобрук: Ваш путь к мастерству в программировании

Конвертировать MKMapRect в CGRect

Я пытаюсь узнать размер MKMapRect в точках (т.е. 320x568 точек для iPhone).

Есть ли что-то похожее на преобразование координат в точки? то есть

[self.mapView convertCoordinate:coordinate1 toPointToView:self.view];

Ответы:


1

Вид карты имеет convertRegion:toRectToView:, который принимает MKCoordinateRegion и преобразует его в CGRect относительно указанного представления.

Если у вас есть MKMapRect, сначала преобразуйте его в MKCoordinateRegion с помощью функции MKCoordinateRegionForMapRect, а затем вызовите convertRegion:toRectToView:.

Пример:

MKCoordinateRegion mkcr = MKCoordinateRegionForMapRect(someMKMapRect);

CGRect cgr = [mapView convertRegion:mkcr toRectToView:self.view];


Помните, что хотя MKMapRect для некоторой фиксированной области не изменится при масштабировании или панорамировании карты, соответствующие CGRect будут различаться по своим origin и size.

27.02.2014

2

Может быть, в качестве практического примера... Я использовал этот код, чтобы добавить наложение на карту на экране, а затем проверить, нужно ли обновлять и какую часть экрана.

Этот метод является частью класса MKOverlay. Мой UIViewController называется «MyWaysViewController», а карта на экране называется «MapOnScreen» (просто для понимания кода)

Его код Swift 3/IOS 10

/**
 -----------------------------------------------------------------------------------------------

 adds the overlay to the map and sets "setNeedsDisplay()" for the visible part of the overlay

 -----------------------------------------------------------------------------------------------

 - Parameters:

 - Returns: nothing

 */
func switchOverlayON() {

    DispatchQueue.main.async(execute: {
        // add the new overlay

        // if the ViewController is already initialised
        if MyWaysViewController != nil {

            // add the overlay
            MyWaysViewController!.MapOnScreen.add(self)

            // as we are good citizens on that device, we check if and for what region we setNeedsDisplay()

            // get the intersection of the overlay and the visible region of the map
            let visibleRectOfOverlayMK = MKMapRectIntersection(
                    self.boundingMapRect,
                    MyWaysViewController!.MapOnScreen.visibleMapRect
            )

            // check if it is null (no intersection -> not visible at the moment)
            if MKMapRectIsNull(visibleRectOfOverlayMK) == false {

                // It is not null, so at least parts are visible, now a two steps aproach to
                // convert MKMapRect to cgRect. first step: get a coordinate region
                let visibleRectCoordinateRegion = MKCoordinateRegionForMapRect(visibleRectOfOverlayMK)

                // second step, convert the region to a cgRect
                let visibleRectOfOverlayCG = MyWaysViewController!.MapOnScreen.convertRegion(visibleRectCoordinateRegion, toRectTo: MyWaysViewController!.MapOnScreen)

                // ask to refresh that cgRect
                MyWaysViewController!.MapOnScreen.setNeedsDisplay(visibleRectOfOverlayCG)
            }
        }
    })
}
25.01.2017
Новые материалы

Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

«Очень простой» эволюционный подход к обучению с подкреплением
В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

Фишинг — Упаковано и зашифровано
Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

ВЫ РЕГРЕСС ЭТО?
Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

Не зря же это называют интеллектом
Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

LeetCode Проблема 41. Первый пропущенный положительный результат
LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..