`

MKLocalSearch用法

 
阅读更多

原文出处:http://phpadvocate.com/blog/2013/01/ios-6-1-simple-example-using-mklocalsearch/

/* MyMapViewController.m */
 
/** 
 * @author Jonathon Hibbard
 */
#import "MyMapViewController.h"
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>
#import <AddressBook/AddressBook.h>
 
 
@interface StoresMapViewController () <MKMapViewDelegate>
// Don't forget to hook this up through IB/NiB - You'll also need to set the mapview's delegate to be this object as well...
@property (nonatomic, weak) IBOutlet MKMapView *mapView;
 
// LocalSearch Stuff...
@property (nonatomic, strong) MKLocalSearch *localSearch;
@property (nonatomic, strong) MKLocalSearchRequest *localSearchRequest;
 
@property CLLocationCoordinate2D coords;
 
//@property MKMapItem *currentLocation;
 
@end
 
@implementation StoresMapViewController
 
 
-(void)viewDidLoad {
 
    [super viewDidLoad];
 
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    //
    // Temporary - change this to use the user's current location or whatever you want...
    //
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    [self setupCoordsUsingAddress:@"Manchester KY 40962"];
}
 
 
-(void)didReceiveMemoryWarning {
 
    [super didReceiveMemoryWarning];
 
    self.localSearch = nil;
    self.localSearchRequest = nil;
}
 
 
-(void)setupCoordsUsingAddress:(NSString *)address {
 
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
 
        if(error) {
 
          NSLog(@"FAILED to obtain geocodeAddress String. Error : %@", error);
          abort();
 
        } else if(placemarks && placemarks.count > 0) {
 
              // Find all retail stores...
              [self issueLocalSearchLookup:@"retail" usingPlacemarksArray:placemarks];
        }
    }];
}
 
 
// Ex: [self issueLocalSearchLookup:@"grocery"];
-(void)issueLocalSearchLookup:(NSString *)searchString usingPlacemarksArray:(NSArray *)placemarks {
 
    // Search 0.250km from point for stores.
    CLPlacemark *placemark = placemarks[0];
    CLLocation *location = placemark.location;
 
    self.coords = location.coordinate;
 
    // Set the size (local/span) of the region (address, w/e) we want to get search results for.
    MKCoordinateSpan span = MKCoordinateSpanMake(0.6250, 0.6250);
    MKCoordinateRegion region = MKCoordinateRegionMake(self.coords, span);
 
    [self.mapView setRegion:region animated:NO];
 
    // Create the search request
    self.localSearchRequest = [[MKLocalSearchRequest alloc] init];
    self.localSearchRequest.region = region;
    self.localSearchRequest.naturalLanguageQuery = searchString;
 
    // Perform the search request...
    self.localSearch = [[MKLocalSearch alloc] initWithRequest:self.localSearchRequest];
    [self.localSearch startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error) {
 
        if(error){
 
            NSLog(@"localSearch startWithCompletionHandlerFailed!  Error: %@", error);
            return;
 
        } else {
 
            // We are here because we have data!  Yay..  a whole 10 records of it too *flex*
            // Do whatever with it here...
 
            for(MKMapItem *mapItem in response.mapItems){
 
                // Show pins, pix, w/e...
 
                NSLog(@"Name for result: = %@", mapItem.name);
                // Other properties includes: phoneNumber, placemark, url, etc.
                // More info here: https://developer.apple.com/library/ios/#documentation/MapKit/Reference/MKLocalSearch/Reference/Reference.html#//apple_ref/doc/uid/TP40012893
            }
 
            MKCoordinateSpan span = MKCoordinateSpanMake(0.2, 0.2);
            MKCoordinateRegion region = MKCoordinateRegionMake(self.coords, span);
            [self.mapView setRegion:region animated:NO];
        }
    }];
}
 
@end;

 

分享到:
评论

相关推荐

    LocalSearchKit:添加了使用 MKLocalSearch 处理多个本地搜索查询的类

    style=flat)]( Krishnamurthy/LocalSearchKit)用法要运行示例项目, pod install克隆 repo,然后从 Example 目录运行pod install 。 使用 cocoapods 来设置你的项目。 如果您不使用 cocoapods,则为 Objective-C ...

    ios-THMapLocationVC.zip

    输入地名,创建一个`MKLocalSearch.Request`,然后使用`MKLocalSearch`发起请求。成功后,解析返回的`MKLocalSearchResponse`获取坐标,然后创建`MKPointAnnotation`并在地图上添加该标注: ```swift let request ...

    QueryAddressMap

    为了实现地址搜索功能,我们需要使用`MKLocalSearchRequest`和`MKLocalSearch`类。`MKLocalSearchRequest`用于封装用户输入的地址信息,而`MKLocalSearch`则用于执行基于这个请求的本地搜索。 在用户点击搜索按钮后...

    用CLLocation与mapkit实现定位与搜索方位功能 iOS

    我们可以使用`CLLocationManager`的`requestWhenInUseAuthorization()`或`requestAlwaysAuthorization()`方法来请求相应的授权。 ```swift if CLLocationManager.locationServicesEnabled() { locationManager....

    ios-地图标注聚集一起是数字,分开显示标注。带搜索.zip

    用户输入的关键词会被转换为MKLocalSearch.Request对象,然后通过MKLocalSearch发起搜索请求,获取结果后在地图上显示为标注。 CDMapViewDemo,作为项目的主要代码文件,可能包含了以下关键组件: 1. 自定义的...

    地图与位置服务

    本文将深入探讨这两个框架的核心概念、使用方法及实际应用。 MapKit是Apple的API,用于在iOS应用中集成地图功能。它提供了丰富的接口,可以显示地图、添加标记、绘制路线、设置覆盖物等。MapKit支持多种地图样式,...

    IOS地图定位

    对于地图显示,可以使用`regionDidChangeAnimated`方法来监听地图的移动,只在需要时加载新的地图数据。 以上就是iOS地图定位功能实现的核心知识点,通过这些技术,开发者可以创建出功能丰富的地图应用,为用户提供...

    IOS应用源码——VPPMap for iOS.rar

    除此之外,源码可能还涉及到地理编码(Geocoding)和反地理编码(Reverse Geocoding)功能,即地址到坐标和坐标到地址的转换,这可以通过`MKLocalSearch`和`CLGeocoder`实现。同时,为了优化用户体验,源码可能包含...

    定位、地理编码、逆地理编码

    例如,你可以创建一个MKLocalSearchRequest对象,设置其自然语言查询为一个地址,然后使用MKLocalSearch发起请求。完成处理程序会返回一个包含MKMapItem对象的结果数组,每个MKMapItem代表一个匹配的地理位置。 **...

    ios-滑动地图显示大头针周围信息.zip

    我们将深入探讨相关的知识点,包括MapKit框架、大头针(Annotation)的使用、获取周边地址信息以及集成到Xcode7.1的项目中。 首先,MapKit是Apple提供的一个强大的框架,用于在iOS应用中集成地图功能。它允许开发者...

    李明杰老师地理编码和发编码

    例如,如果你有一个地址字符串"北京市海淀区中关村大街1号",你可以创建一个MKLocalSearchRequest,设置其naturalLanguageQuery属性为这个地址,然后使用MKLocalSearch来进行搜索,得到的结果会包含对应的经纬度坐标...

    地图导航与定位

    MapKit还提供了许多其他功能,如搜索地址(MKLocalSearch)、添加标注(MKPointAnnotation)、显示路线(MKDirections)等。通过组合使用Core Location和MapKit,开发者可以构建出功能丰富的地图应用,满足用户在...

    MKMapKit系统地图相关demo

    MKLocalSearchRequest和MKLocalSearch可以用于执行这些操作,帮助用户在地图上查找地点或者根据坐标获取详细地址。 5. **路径规划(Directions)**: - MKDirections类提供了计算两点间路线的功能,包括驾车、步行...

    IOS应用源码——地图上多个指针显示(一些本地化应用或社交应用可以用得到).zip

    6. **地理编码与反地理编码**:如果源码涉及到地理位置的文本输入,可能会使用MapKit的`MKLocalSearchRequest`和`MKLocalSearch`类来实现地理编码(将地址转换为坐标)和反地理编码(将坐标转换为地址)。...

    滚轮实现有滑动效果选择时间和地址+小时分钟

    对于地址选择,Android提供了`AutocompleteTextView`,iOS则有`MKLocalSearch`和`UISearchController`,它们支持地理位置搜索和建议。 为了优化用户体验,滚轮滑动效果还需要考虑以下几点: 1. **流畅性**:滚动...

    Python库 | pyobjc-framework-MapKit-5.1.2.tar.gz

    MapKit提供了许多其他功能,如添加标注(`MKAnnotation`)来表示特定地点,使用`MKLocalSearch`进行本地搜索,或通过`MKDirections`计算路径和导航。例如,你可以创建自定义的标注类来展示地图上的兴趣点: ```...

    IOS应用源码——类似于谷歌地图线路搜索的一个组件demo.zip

    MapKit提供了`MKLocalSearch`类来执行这些操作,这对于搜索目的地和获取其坐标至关重要。 3. **路线规划**:MapKit支持多种交通方式(如驾车、步行、骑行)的路径计算。开发者可能使用`MKDirections`类来请求路线,...

    用Swift实现的地图

    例如,你可以使用`MKLocalSearch`来执行本地搜索,或者使用`MKDirections`来计算两点之间的路线。同时,`MKPolyline`和`MKPolygon`可以用来绘制路径或区域。 总的来说,Swift中的MapKit框架为iOS开发者提供了强大的...

    maps-ios-swiftui

    同时,我们还可以利用`MKLocalSearch`进行地点搜索,或者使用`MKDirections`请求路线,将结果展示在地图上。这些功能需要处理请求的回调,以获取并显示搜索结果或导航路线。 在项目"maps-ios-swiftui-main"中,应该...

Global site tag (gtag.js) - Google Analytics