Элементы рисования на MKMapView указанного размера в метрах

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

У кого-нибудь есть опыт в этом?


person yelirekim    schedule 20.03.2010    source источник


Ответы (1)


У меня нет опыта выполнения того, что вы описали выше, но класс MKMapView имеет набор методов для согласования пикселей с координатами и наоборот, которые вы должны использовать для сопоставления своего круга с координатами на карте:

http://developer.apple.com/iphone/library/documentation/MapKit/Reference/MKMapView_Class/MKMapView/MKMapView.html#//apple_ref/occ/instm/MKMapView/convertCoordinate:toPointToView:

Эта функция также может пригодиться для поиска точки на диаметре вашего круга для использования с вышеупомянутыми функциями, если у вас есть центральная точка, радиус круга в метрах и азимут в градусах.

-(CLLocation*) offsetLocation:(CLLocation*)startLocation:(double)offsetMeters:(double)bearing
{

        double EARTH_MEAN_RADIUS_METERS = 6372796.99;
        double lat2 = asin( sin(startLocation.coordinate.latitude) * cos(offsetMeters/EARTH_MEAN_RADIUS_METERS) + cos(startLocation.coordinate.latitude) * sin(offsetMeters/EARTH_MEAN_RADIUS_METERS) * cos(bearing) );
        double lon2 = startLocation.coordinate.longitude + atan2( sin(bearing) * sin(offsetMeters/EARTH_MEAN_RADIUS_METERS) * cos(startLocation.coordinate.latitude), cos(offsetMeters/EARTH_MEAN_RADIUS_METERS) - sin(startLocation.coordinate.latitude) * sin(lat2));
        CLLocation *tempLocation = [[CLLocation alloc] initWithLatitude:lat2 longitude:lon2];

        return tempLocation;
}
person Eric Schweichler    schedule 20.03.2010