Я знаком с 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];