Π Π΅ΡΠ΅Π½ΠΈΠ΅
ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° UIImage ΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ ΡΡΠΎΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Ρ image ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° MKAnnotationView. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ΅ Π½Π°ΠΌΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊΠ°ΡΡΠ΅ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°ΡΠΊΠ΅ΡΠ°:
β (MKAnnotationView *)mapView:(MKMapView *)mapView
viewForAnnotation:(id <MKAnnotation>)annotation{
MKAnnotationView *result = nil;
if ([annotation isKindOfClass: [MyAnnotation class]] == NO){
return result;
}
}
if ([mapView isEqual: self.myMapView] == NO){
/* ΠΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ Map View,
ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΡΠ°Π½Π΅Π΅. */
return result;
}
/* Π‘Π½Π°ΡΠ°Π»Π° ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠΌ ΡΠΈΠΏ ΡΠΎΠΉ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠΎΡ Map View
Π·Π°ΠΏΡΡΡΠΈΠ» Π΄Π°Π½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π΄Π΅Π»Π΅Π³Π°ΡΠ°. */
MyAnnotation *senderAnnotation = (MyAnnotation *)annotation;
/* Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΊΠ»Π°ΡΡΠ°, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π² Π½Π°ΡΠ΅ΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌ
ΠΊΠ»Π°ΡΡΠ΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ, ΠΏΠΎΠΏΡΡΠ°Π΅ΠΌΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΡΠ°Π·ΠΎΠ²ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ
Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΠΌΠ°ΡΠΊΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅ΠΉΡΠ°Ρ ΡΠΎΠ·Π΄Π°Π΅ΠΌ. */
NSString *pinReusableIdentifier =
[MyAnnotation
reusableIdentifierforPinColor: senderAnnotation.pinColor];
/* ΠΠΎΠ»ΡΠ·ΡΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΌ ΡΠ°Π½Π΅Π΅, ΠΏΠΎΠΏΡΡΠ°Π΅ΠΌΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ
ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΌΠ°ΡΠΊΠ΅Ρ Π² ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΠ΅ΠΌ Map View. */
MKPinAnnotationView *annotationView = (MKPinAnnotationView *)
[mapView
dequeueReusableAnnotationViewWithIdentifier:
pinReusableIdentifier];
if (annotationView == nil){
/* ΠΡΠ»ΠΈ Π½Π°ΠΌ Π½Π΅ ΡΠ΄Π°ΡΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠΌΠ΅ΡΡΠΈΠΉΡΡ ΠΌΠ°ΡΠΊΠ΅Ρ,
ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²ΡΠΉ. */
annotationView =
[[MKPinAnnotationView alloc] initWithAnnotation: senderAnnotation
reuseIdentifier: pinReusableIdentifier];
/* Π£Π±Π΅ΠΆΠ΄Π°Π΅ΠΌΡΡ, ΡΡΠΎ Π²ΠΈΠ΄Π½Ρ Π²ΡΠ½ΠΎΡΠΊΠΈ ΠΏΠΎΠ²Π΅ΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ°ΡΠΊΠ΅ΡΠ° Π² ΡΠ»ΡΡΠ°Π΅,
Π΅ΡΠ»ΠΈ ΠΌΡ ΠΏΡΠΈΡΠ²ΠΎΠΈΠ»ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΌΠ°ΡΠΊΠ΅ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈ/ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ. */
annotationView.canShowCallout = YES;
}
UIImage *pinImage = [UIImage imageNamed:@"BluePin.png"];
if (pinImage!= nil){
annotationView.image = pinImage;
}
result = annotationView;
return result;
}
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ BluePin.png (Π² ΠΏΠ°ΠΊΠ΅ΡΠ΅ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ) Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΌΠ°ΡΠΊΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ°Π²ΠΈΡΡΡ Π½Π° ΠΊΠ°ΡΡΠ΅. ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° MyAnnotation ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 9.5.
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅
ΠΠ±ΡΠ΅ΠΊΡ Π΄Π΅Π»Π΅Π³Π°ΡΠ°, ΠΎΡΠ½ΠΎΡΡΡΠΈΠΉΡΡ ΠΊ ΠΊΠ»Π°ΡΡΡ MKMapView, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ MKMapViewDelegate ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ mapView: viewForAnnotation:. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° MKAnnotationView. ΠΡΠ±ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠ²Π»ΡΡΡΠΈΠΉΡΡ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠΎΠΌ Π²ΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ image. ΠΡΠ»ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ ΡΡΠΎΠΌΡ ΡΠ²ΠΎΠΉΡΡΠ²Ρ ΡΠ°ΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΎ ΠΌΡ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠ΅ Π²ΠΎ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ΅ Map Kit. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° ΡΠΈΡ. 9.4.
Π ΠΈΡ. 9.4. ΠΠ°ΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π² ΠΊΠ°ΡΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅
Π Π°Π·Π΄Π΅Π» 9.5.
9.7. ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΡΠ½ΡΡ Π°Π΄ΡΠ΅ΡΠΎΠ² Π² Π΄Π°Π½Π½ΡΠ΅ ΡΠΈΡΠΎΡΡ ΠΈ Π΄ΠΎΠ»Π³ΠΎΡΡ
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
ΠΠΌΠ΅Π΅ΡΡΡ Π°Π΄ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ°, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΉΡΠΈ Π΅Π³ΠΎ Π³Π΅ΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ (ΡΠΈΡΠΎΡΡ ΠΈ Π΄ΠΎΠ»Π³ΠΎΡΡ).
Π Π΅ΡΠ΅Π½ΠΈΠ΅
ΠΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ geocodeAddressString: completionHandler: ΠΈΠ· ΠΊΠ»Π°ΡΡΠ° CLGeocoder.
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅
ΠΠ±ΡΠ°ΡΠ½ΠΎΠ΅ Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (Reverse Geocoding) β ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ° (ΡΠΎ Π΅ΡΡΡ ΡΡΡΠ°Π½Ρ, Π³ΠΎΡΠΎΠ΄Π° ΠΈ Ρ. Π΄.) Π½Π° Π±Π°Π·Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΡΠΈΡΠΎΡΡ ΠΈ Π΄ΠΎΠ»Π³ΠΎΡΡ). Π ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΠ΅ΡΠΊΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ°. Π€ΡΠ½ΠΊΡΠΈΠΈ Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π·Π°ΠΊΠ»ΡΡΠ΅Π½Ρ Π² ΠΊΠ»Π°ΡΡΠ΅ CLGeocoder ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° Core Location.
ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡΡΠ΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π°Π΄ΡΠ΅ΡΠ° Π² ΡΠΎΡΠΌΠ°ΡΠ΅ NSString ΠΌΠ΅ΡΠΎΠ΄Ρ geocodeAddressString: completionHandler:, ΠΎΡΠ½ΠΎΡΡΡΠ΅ΠΌΡΡΡ ΠΊ ΠΊΠ»Π°ΡΡΡ CLGeocoder. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ completionHandler ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠΉ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΠΈΠΌΠ΅ΡΡΠΈΠΉ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°:
β’ ΠΌΠ°ΡΡΠΈΠ² ΠΌΠ΅ΡΠΎΠΊ (ΡΠΈΠΏΠ° NSArray). ΠΠ΅ΡΠΊΠ°ΠΌΠΈ Π±ΡΠ΄ΡΡ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½Ρ ΡΠ΅ ΡΠΎΡΠΊΠΈ Π½Π° ΠΊΠ°ΡΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°;
β’ ΠΎΡΠΈΠ±ΠΊΡ (ΡΠΈΠΏΠ° NSError), ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Π° Π² ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ, Π΅ΡΠ»ΠΈ Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΡΠ΄Π°ΡΡΡΡ.
ΠΡΠ°ΠΊ, ΡΠ½Π°ΡΠ°Π»Π° ΠΎΠ±ΡΡΠ²ΠΈΠΌ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΠΈΠΏΠ° CLGeocoder:
#import Β«ViewController.hΒ»
#import <CoreLocation/CoreLocation.h>
@interface ViewController ()
@property (nonatomic, strong) CLGeocoder *myGeocoder;
@end
@implementation ViewController
ΠΠ΄Π΅ΠΌ Π΄Π°Π»ΡΡΠ΅. Π Π΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΠΊΠΎΠ΄ Π΄Π»Ρ Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π°Π΄ΡΠ΅ΡΠ°:
β (void)viewDidLoad{
[super viewDidLoad];
/* Π£ Π½Π°Ρ Π΅ΡΡΡ Π°Π΄ΡΠ΅Ρ. */
NSString *oreillyAddress =
@"1005 Gravenstein Highway North, Sebastopol, CA 95472, USA";
self.myGeocoder = [[CLGeocoder alloc] init];
[self.myGeocoder
geocodeAddressString: oreillyAddress
completionHandler: ^(NSArray *placemarks, NSError *error) {
if ([placemarks count] > 0 &&
error == nil){
NSLog(@"Found %lu placemark(s).", (unsigned long)[placemarks count]);
CLPlacemark *firstPlacemark = [placemarks objectAtIndex:0];
NSLog(@"Longitude = %f",
firstPlacemark.location.coordinate.longitude);
NSLog(@"Latitude = %f", firstPlacemark.location.coordinate.latitude);
}
else if ([placemarks count] == 0 &&
error == nil){
NSLog(@"Found no placemarks.");
}
else if (error!= nil){
NSLog(@"An error occurred = %@", error);
}
}];
}
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½Π° (Π΄Π°ΠΆΠ΅ Π² ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ΅), Π² ΠΎΠΊΠ½Π΅ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΏΠΎΡΠ²ΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ (ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ):
Found 1 placemark(s).
Longitude = -122.8 41135
Latitude = 38.4 10373
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅
Π Π°Π·Π΄Π΅Π» 9.8.
9.8. ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΡΠΈΡΠΎΡΡ ΠΈ Π΄ΠΎΠ»Π³ΠΎΡΡ Π² ΠΎΠ±ΡΡΠ½ΡΠ΅ Π°Π΄ΡΠ΅ΡΠ°
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
ΠΠΌΠ΅ΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΡΠΎΡΡ ΠΈ Π΄ΠΎΠ»Π³ΠΎΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΠΎΡΠΊΠΈ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΅Π΅ Π°Π΄ΡΠ΅Ρ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅Π½Π½ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ (x ΠΈ y) Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΌ Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. ΠΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° CLGeocoder, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ. ΠΡΠΈ ΡΡΠΎΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΡΠΎ Π±Π»ΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°:
β’ ΠΌΠ°ΡΡΠΈΠ² ΠΌΠ΅ΡΠΎΠΊ (ΡΠΈΠΏΠ° NSArray). ΠΠ΅ΡΠΊΠ°ΠΌΠΈ Π±ΡΠ΄ΡΡ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½Ρ ΡΠ΅ ΡΠΎΡΠΊΠΈ Π½Π° ΠΊΠ°ΡΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°;
β’ ΠΎΡΠΈΠ±ΠΊΡ (ΡΠΈΠΏΠ° NSError), ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Π° Π² ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ΅ Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΡΠ΄Π°ΡΡΡΡ.
ΠΠ½ΡΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π² ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° CLGeocoder, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄ reverseGeocodeLocation: completionHandler: Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ΅ΡΡ Π½ΡΡ ΡΠ°ΡΡΡ. m-ΡΠ°ΠΉΠ»Π° ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° Π²ΠΈΠ΄Π°, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
#import Β«ViewController.hΒ»
#import <CoreLocation/CoreLocation.h>
@interface ViewController ()
@property (nonatomic, strong) CLGeocoder *myGeocoder;
@end
@implementation ViewController
Π Ρ ΠΎΠ΄Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π²ΠΈΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ΅ Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅:
β (void)viewDidLoad{
[super viewDidLoad];
CLLocation *location = [[CLLocation alloc]
initWithLatitude:+38.41 12810
longitude:-122.8409780f];
self.myGeocoder = [[CLGeocoder alloc] init];
[self.myGeocoder
reverseGeocodeLocation: location
completionHandler: ^(NSArray *placemarks, NSError *error) {
if (error == nil && placemarks.count > 0){
CLPlacemark *placemark = placemarks[0];
/* Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Ρ. */
NSLog(@"Country = %@", placemark.country);
NSLog(@"Postal Code = %@", placemark.postalCode);
NSLog(@"Locality = %@", placemark.locality);
}
else if (error == nil &&
[placemarks count] == 0){
NSLog(@"No results were returned.");
}
else if (error!= nil){
NSLog(@"An error occurred = %@", error);
}
}];
}
β (void)viewDidUnload{
[super viewDidUnload];
self.myGeocoder = nil;
}
ΠΡΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π·Π°Π²Π΅ΡΡΠΈΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ, ΡΠΎ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ placemarks Π±ΡΠ΄ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΈΠΏΠ° CLPlacemark. ΠΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π±ΡΠ΄ΡΡ ΠΎΡΠΌΠ΅ΡΠ°ΡΡ Π°Π΄ΡΠ΅ΡΠ°, ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ ΡΠΈΡΠΎΡΡ ΠΈ Π΄ΠΎΠ»Π³ΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΡΠΎΠΎΠ±ΡΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ reverseGeocodeLocation: completionHandler:. ΠΡΠ°ΠΊ, Π²ΡΠ΅, ΡΡΠΎ ΠΎΡ Π½Π°Ρ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, β ΡΠ±Π΅Π΄ΠΈΡΡΡΡ Π² ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΌΠ΅ΡΠΎΠΊ Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΎΠ΄Π½Π° ΠΌΠ΅ΡΠΊΠ°.