Преобразование долготы / широты в x / y на iPhone

Я показываю изображение в UIImageView, и я хотел бы преобразовать координаты в значения x / y, чтобы я мог показывать города на этом изображении. Это то, что я попытался на основе моих исследований:

CGFloat height = mapView.frame.size.height; CGFloat width = mapView.frame.size.width; int x = (int) ((width/360.0) * (180 + 8.242493)); //Main lon int y = (int) ((height/180.0) * (90 - 49.993615)); //Mainz lat NSLog(@"x:%iy:%i",x,y); PinView *pinView = [[PinView alloc]initPinViewWithPoint:x andY:y]; [self.view addSubview:pinView]; 

который дает мне 167 как x и y = 104, но этот пример должен иметь значения x = 73 & y = 294.

mapView – это мой UIImageView, просто для уточнения.

Поэтому моя вторая попытка заключалась в использовании MKMapKit:

 CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(49.993615, 8.242493); MKMapPoint point = MKMapPointForCoordinate(coord); NSLog(@"x is %f and y is %f",point.x,point.y); 

Но это дает мне действительно странные значения: x = 140363776.241755 и y – 91045888.536491. Итак, у вас есть идея, что я должен сделать, чтобы заставить это работать?

Спасибо !

Для выполнения этой работы вам необходимо знать 4 части данных:

  1. Широта и долгота верхнего левого угла изображения.
  2. Широта и долгота нижнего правого угла изображения.
  3. Ширина и высота изображения (в точках).
  4. Широта и долгота точки данных.

С помощью этой информации вы можете сделать следующее:

 // These should roughly box Germany - use the actual values appropriate to your image double minLat = 54.8; double minLong = 5.5; double maxLat = 47.2; double maxLong = 15.1; // Map image size (in points) CGSize mapSize = mapView.frame.size; // Determine the map scale (points per degree) double xScale = mapSize.width / (maxLong - minLong); double yScale = mapSize.height / (maxLat - minLat); // Latitude and longitude of city double spotLat = 49.993615; double spotLong = 8.242493; // position of map image for point CGFloat x = (spotLong - minLong) * xScale; CGFloat y = (spotLat - minLat) * yScale; 

Если x или y отрицательны или больше размера изображения, то точка не указана на карте.

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

Редактировать:

Чтобы преобразовать точку изображения обратно в координату, просто измените расчет:

 double pointLong = pointX / xScale + minLong; double pointLat = pointY / yScale + minLat; 

где pointX и pointY представляют точку на изображении в экранных точках. (0, 0) – верхний левый угол изображения.

  • Помощь в помощи калькулятора iPhone, десятичный стиль.
  • Как определить повторяющуюся десятичную
  • вращение объекта неверно - приложение для iPhone
  • при использовании CMDeviceMotion, если устройство находится прямо (pitch = 90), это действительно неустойчиво. В любом случае, чтобы решить это?
  • Как округлить CGFloat
  • Объект Scenekit, который находится в центре обзора камеры (Swift)
  • Помощь iOS: math.h? Где это?
  • Создайте путь для перемещения игрока из текущего положения в новое положение с помощью «поворота круга»,
  • Вычисление квадрантной кривой между двумя точками xy
  • iOS: Точное определение энергии ударной волны от выхода акселерометра
  • как найти точку на пути линии
  • Давайте будем гением компьютера.