Рисование элементов в MKMapView указанного размера в метрах - PullRequest
0 голосов
/ 20 марта 2010

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

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

1 Ответ

0 голосов
/ 20 марта 2010

У меня нет никакого опыта в том, что вы описываете выше, но класс 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;
}
...