Преобразование CLLocationCoordinate2D в систему координат iphone/ipad

Я пытаюсь преобразовать координаты, возвращенные диспетчером cllocation, и вывести их на экран iPad. я пробовал это, но точки не отмечены правильно

CGSize screenSize = _tilingView.bounds.size;
CGFloat SCALE = MIN(screenSize.width, screenSize.height) / (2.0 * EARTH_RADIUS);
CGFloat OFFSET = MIN(screenSize.width, screenSize.height) / 2.0;
CGFloat x = EARTH_RADIUS * cos(latLong.x) * cos(latLong.y);
CGFloat y = EARTH_RADIUS * cos(latLong.x) * sin(latLong.y);

_tilingview — это мой вид, на котором у меня есть настраиваемая внутренняя карта, на которой я хочу показать местоположение пользователей.


person user3637382    schedule 17.07.2014    source источник


Ответы (1)


Этот подход не сработает, потому что Земля не является идеальной сферой — у нее разные радиусы по обеим осям. Кроме того, градусы широты нелинейны — линейное расстояние меняется в зависимости от угла форме Земли. Карты выглядят линейными, потому что они используют проекцию — обычно проекцию Меркатора — для проецирования поверхности (почти) сферы на плоскую поверхность .

В структуре MapKit есть некоторые вспомогательные функции для преобразования между географическими координатами и координатами вида — MKMetersPerMapPointAtLatitude и MKMapPointForCoordinate. На WWDC 2014 также была хорошая сессия - 'Выполнение основного местоположения в помещении', в котором описаны эти функции и то, как их можно использовать для преобразования географических координат в линейные координаты.

person Paulw11    schedule 18.07.2014