как сделать масштабирование карты до 5-мильного радиуса текущего местоположения - PullRequest
26 голосов
/ 17 февраля 2011

Я знаю, что это очень распространенная проблема, но я не получаю точного ответа на этот вопрос.

Как настроить MKMapView по умолчанию на увеличение радиуса в 5 миль от текущего местоположения.

Заранее спасибо.

Ответы [ 3 ]

58 голосов
/ 17 февраля 2011

Используйте функцию MKCoordinateRegionMakeWithDistance из MapKit.

Используйте функцию преобразования для преобразования миль в метры, поскольку MapKit использует метры.

float MilesToMeters(float miles) {
    // 1 mile is 1609.344 meters
    // source: http://www.google.com/search?q=1+mile+in+meters
    return 1609.344f * miles;
}

Затем в вашем коде установите регион карты как (спасибо @DylanBettermann за указание на то, что для получения радиуса в 5 миль расстояние нужно удвоить)

mapView.region = MKCoordinateRegionMakeWithDistance(
    centerCoordinate, 
    MilesToMeters(10.0f),
    MilesToMeters(10.0f)
);

Swift 4 версия:

mapView.region = MKCoordinateRegion(
            center: centerCoordinate,
            latitudinalMeters: MilesToMeters(10.0f),
            longitudinalMeters: MilesToMeters(10.0f)
)
55 голосов
/ 17 февраля 2011

Используйте следующий код, когда хотите увеличить радиус до 5 миль:

double miles = 5.0;
double scalingFactor = ABS( (cos(2 * M_PI * newLocation.coordinate.latitude / 360.0) ));

MKCoordinateSpan span; 

span.latitudeDelta = miles/69.0;
span.longitudeDelta = miles/(scalingFactor * 69.0); 

MKCoordinateRegion region;
region.span = span;
region.center = newLocation.coordinate;

[mapView setRegion:region animated:YES];
2 голосов
/ 17 февраля 2011
[self.theMapView setRegion:MKCoordinateRegionMake(
                    [theConsumer.latLong.clLocation coordinate], 
                    MKCoordinateSpanMake( MAP_SPAN, MAP_SPAN ))
                 animated:YES];

Параметры до MKCoordinateSpanMake даны в градусах, а 1 градус составляет около 69 миль на экваторе.Таким образом, MAP_SPAN будет 5,0 / 69,0

...