Эквивалентный код Objective-C для Google Maps GMap2.getBoundsZoomLevel (границы)? - PullRequest
1 голос
/ 30 октября 2010

Я знаком с API Карт Google и сейчас пытаюсь изучить библиотеку iOS MapKit. У меня есть приложение для iPhone, которое берет строку ввода и геокодирует ее, используя сервис геокодера Google Maps. Я также хочу установить соответствующий уровень масштабирования для новой карты, но я не совсем уверен, как это сделать.

После прочтения, Определение уровня масштабирования по одному LatLong в API Карт Google

Я планировал проанализировать ответ JSON из API Карт Google и извлечь поле ExtendedData.

 "ExtendedData":{
     "LatLonBox":{
         "north":34.13919,
         "south":34.067018, 
         "east":-118.38971, 
         "west":-118.442796
     }

Затем, используя это, я хотел бы установить границы моей карты соответственно, используя функцию setRegion MapKit.

Я начал выкладывать функцию для этого, но я немного потерял логику ...

- (void) setMapZoomForLocation(CLLocationCoordinate2D location, double north, double south, double east, double west){

    // some fancy math here....

    // set map region
    MKCoordinateRegion region;
    region.center = location;
    MKCoordinateSpan span;

    // set the span so that the map bounds are correct
    span.latitudeDelta = ???;
    span.longitudeDelta = ???;

    region.span = span;
    [self.mapView setRegion:region animated:YES];
}

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

См. https://code.google.com/apis/maps/documentation/geocoding/v2/#GeocodingAccuracy

------------------------ Обновление: Решение, которое я использовал ------------------ ------------

// parse json result
NSDictionary *results = [jsonString JSONValue];
NSArray *placemarks = (NSArray *) [results objectForKey:@"Placemark"];
NSDictionary *firstPlacemark = [placemarks objectAtIndex:0];

// parse out location
NSDictionary *point = (NSDictionary *) [firstPlacemark objectForKey:@"Point"];
NSArray *coordinates = (NSArray *) [point objectForKey:@"coordinates"];
CLLocationCoordinate2D location;
location.latitude = [[coordinates objectAtIndex:1] doubleValue];
location.longitude = [[coordinates objectAtIndex:0] doubleValue];
// DEBUG
//NSLog(@"Parsed Location: (%g,%g)", location.latitude, location.longitude);

// parse out suggested bounding box
NSDictionary *extendedData = (NSDictionary *) [firstPlacemark objectForKey:@"ExtendedData"];
NSDictionary *latLngBox = (NSDictionary *) [extendedData objectForKey:@"LatLonBox"];

double north = [[latLngBox objectForKey:@"north"] doubleValue];
double south = [[latLngBox objectForKey:@"south"] doubleValue];
double east = [[latLngBox objectForKey:@"east"] doubleValue];
double west = [[latLngBox objectForKey:@"west"] doubleValue];
// DEBUG
//NSLog(@"Parsed Bounding Box: ne = (%g,%g), sw = (%g,%g)", north, east, south, west);

MKCoordinateSpan span = MKCoordinateSpanMake(fabs(north - south), fabs(east - west));
MKCoordinateRegion region = MKCoordinateRegionMake(location, span);
[self.mapView setRegion:region animated:YES];

1 Ответ

1 голос
/ 03 ноября 2010

Если все, что вы хотите сделать, это сгенерировать MKCoordinateRegion, вам вообще не нужно ничего знать об уровне масштабирования.Просто создайте область координат, используя ширину и высоту LatLonBox.

MKCoordinateSpan span = MKCoordinateSpanMake(fabs(north - south), fabs(east - west));
MKCoordinateRegion region = MKCoordinateRegionMake(location, span);
[self.mapView setRegion:region animated:YES];
...