Если я правильно понимаю, вам нужно сделать две вещи. Во-первых, поместите ваше пользовательское изображение в вид карты, и ваши плитки будут отображаться с правильными координатами, затем панорамирование, масштабирование и т.д. Второе, что вам нужно сделать, это нарисовать точку на этом изображении на определенной широте и долготе.
Вам нужно пользовательских оверлеев , доступных в iOS 4 и более поздних версиях. Лучшее место, чтобы узнать о пользовательских оверлеях - видео WWDC 2010 под названием «Сессия 127 - Настройка карт с помощью оверлеев». Для видео также доступен специальный код. В видео докладчик создает пользовательскую карту и встраивает ее в MKMapView. Он также описывает инструмент, который вы можете использовать для создания своих плиток (чтобы разрезать их, получить их формы в проекции Меркатора и правильно назвать их). Его карта сканируется с морской карты, а затем помещается поверх обычного вида карты.
Вы сможете использовать boundingMapRect
для создания прямоугольника границ путем преобразования границ вашей пользовательской карты в точки. Вы можете конвертировать между точками и координатами, используя MKMapPointForCoordinate
и MKCoordinateForMapPoint
.
Что касается рисования точки на карте, вы можете сделать это несколькими способами. Самое простое - просто использовать пользовательский MKAnnotationView
с точкой в качестве изображения. Таким образом, изображение не увеличивается и не сжимается при увеличении. Если вы хотите, чтобы точка росла и сужалась, вы должны использовать для этого и собственное наложение. Вы можете легко использовать MKCircleView
, который является подклассом MKOverlayView
Для стрелки вы можете использовать обычный вид и поворачивать ее (и размещать на одной стороне экрана) в соответствии с направлением вашей точки за пределами допустимых границ. Используйте MKMapPointForCoordinate
, а затем рассчитайте направление от центра вашего взгляда.
Но вашим лучшим источником будет это видео. Он углубляется во весь процесс и дает источник для рабочего приложения, что на 90% больше, чем нужно для вашей собственной карты.