Масштабирование карты - PullRequest
0 голосов
/ 25 января 2012

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

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

Вот код, который я использовал при масштабировании.

-(void)zoomToFitMapAnnotations:(MKMapView*)mapViews
{
if([mapViews.annotations count] == 0)
    return;

CLLocationCoordinate2D topLeftCoordinate;
topLeftCoordinate.latitude = -90;
topLeftCoordinate.longitude = 180;

CLLocationCoordinate2D bottomRightCoord;
bottomRightCoord.latitude = 90;
bottomRightCoord.longitude = -180;

for(SJAddressAnnotation* annotation in mapViews.annotations)
{
    topLeftCoordinate.longitude = fmin(topLeftCoordinate.longitude, annotation.coordinate.longitude);
    topLeftCoordinate.latitude = fmax(topLeftCoordinate.latitude, annotation.coordinate.latitude);

    bottomRightCoord.longitude = fmax(bottomRightCoord.longitude, annotation.coordinate.longitude);
    bottomRightCoord.latitude = fmin(bottomRightCoord.latitude, annotation.coordinate.latitude);
}

MKCoordinateRegion region;
region.center.latitude = topLeftCoordinate.latitude - (topLeftCoordinate.latitude - bottomRightCoord.latitude) * 0.5;
region.center.longitude = topLeftCoordinate.longitude + (bottomRightCoord.longitude - topLeftCoordinate.longitude) * 0.5;
region.span.latitudeDelta = fabs(topLeftCoordinate.latitude - bottomRightCoord.latitude) * 1.1; // Add a little extra space on the sides
region.span.longitudeDelta = fabs(bottomRightCoord.longitude - topLeftCoordinate.longitude) * 1.1; // Add a little extra space on the sides

region = [mapView regionThatFits:region];
[mapView setRegion:region animated:YES];
}

Я попытался изменить уровень диапазона безуспешно. Нужна помощь в этом случае.

1 Ответ

1 голос
/ 25 января 2012

Как я уже говорил, есть проблема с одной аннотацией.Если вы извлекаете места из поиска Google, то для каждого места указывается приблизительный уровень увеличения (в зависимости от того, является ли это страна / город).Вы можете попробовать, набрав http://maps.google.com/maps/geo?q=asia&output=json в вашем браузере.Вы можете попробовать разные записи, заменив Азию на Китай или Нью-Йорк и т. д. Посмотрите на атрибут ответа Accuracy в браузере.Это будет 0 для континентов, 1 для стран и т. Д.

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

@interface AddressAnnotation : NSObject<MKAnnotation> {
double zoomLevel;
}
@property(readwrite,nonatomic) double zoomLevel ;
@end




 @implementation AddressAnnotation
    @synthesize zoomLevel;
    -(void)setZoomLevel (double) parameter
    {
    self.zoomLevel = parameter;
    }
@end

и, наконец,если предположить, что annot является вашей аннотацией, то

  [annot setZoomLevel: .1]; //instead of .1 you can set different values

при отображении этой аннотации задайте центр области в качестве координаты аннотации и установите span в качестве annotation.zoomLevel.

MKCoordinateRegion region;
region.center.latitude = annotation.coordinate.latitude;
region.center.longitude = annotation.coordinate.longitude;
region.span.latitudeDelta = annotation.zoomLevel;
region.span.longitudeDelta = annotation.zoomLevel;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...