本文分爲三部分,第一部分詳解用Swift語言開發LBS應用,並給出完整的示例與源代碼;第二部分介紹如何申請LBS密鑰,第三部分是綜合示例查看,掃描二維碼便可查看示例demo。php
一、下載iOS地圖SDK的最新版本,地址:http://lbs.amap.com/api/ios-sdk/down/ios
二、申請LBS密鑰(見第二部分)。git
三、xCode新建工程github
新建一個 Single View Application 工程。注意:Language 選擇 Swiftswift
四、工程配置api
a.引入地圖庫&搜索庫app
左側目錄中選中工程名,在 TARGETS->Build Phases-> Link Binary With Libaries 中點擊「+」按鈕,在彈出的窗口中點擊「Add Other」按鈕,選擇解壓後的 MAMapKit.framework 文件添加到工程中。ide
搜索庫的添加方法同上。函數
b.引入AMap.bundle資源文件ui
AMap.bundle資源文件中存儲了定位、默認大頭針標註視圖等圖片,可利用這些資源圖片進行開發。
左側目錄中選中工程名,在右鍵菜單中選擇Add Files to 「工程名」…,從 MAMapKit.framework->Resources 文件夾中選擇 AMap.bundle文件,並勾選「Copy items if needed」複選框,單擊「Add」按鈕,將資源文件添加到工程中。
c.引入系統庫
左側目錄中選中工程名,在TARGETS->Build Settings-> Link Binary With Libaries中點擊「+」按鈕,在彈出的窗口中查找並選擇所需的庫(見下表),單擊「Add」按鈕,將庫文件添加到工程中。
說明:
備註中,2D表示使用2D柵格地圖須要的系統文件,3D表示使用3D矢量地圖須要的系統文件、Search表示使用搜索庫須要的系統文件。
SystemConfiguration.framework、CoreTelephonySecurity.framework、Security.framework 是爲了統計app信息使用。
d.Swift編譯配置
首先:新建橋接頭文件(放在工程路徑下),這裏命名爲 AMapDemoSwift-Bridging-Header.h,在該頭文件中import須要的庫文件,代碼以下:
#import <MAMapKit/MAMapKit.h> #import <AMapSearchKit/AMapSearchAPI.h>
而後,左側目錄中選中工程名,在 TARGETS->Build Phases-> Swift Compiler - Code Generation -> Objective-C Briding Header 中輸入橋接文件的路徑
五、地圖的顯示
以3D矢量地圖SDK爲例,進行介紹。
在 ViewController.swift 中,繼承 MAMapViewDelegate 協議,在 viewDidLoad 方法中配置用戶Key,初始化 MAMapView 對象,並添加到 Subview中。代碼以下:
let APIKey = "8a1383b14466a8dbf362f44357c496c0" class ViewController: UIViewController , MAMapViewDelegate{ var mapView:MAMapView? override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. // 配置用戶Key MAMapServices.sharedServices().apiKey = APIKey // 初始化MAMapView initMapView() } func initMapView(){ mapView = MAMapView(frame: self.view.bounds) mapView!.delegate = self self.view.addSubview(mapView!) } }
運行程序,地圖顯示出來了,就是這樣簡單~
六、一個實用的例子
以逆地理編碼爲例,寫一個完整的示例。實現步驟以下:
(1) 初始化主搜索對象AMapSearchAPI,並繼承搜索協議 AMapSearchDelegate 。
(2) 構造 Request 對象,配置搜索參數。
(3) 經過主搜索對象以 Request 對象爲參數,發起搜索。
(4) 實現搜索協議中對應的回調函數,經過解析 Response 對象獲取搜索結果。
經過定位獲取當前位置的經緯度,在點擊定位標註(小藍點)時,進行逆地理編碼,在彈出的氣泡中顯示定位點的地址。實現該場景有如下幾個步驟:
1.開啓定位,顯示定位標註(小藍點)。
2.在定位的回調函數中獲取定位點的經緯度。
3.點擊定位標註,執行逆地理編碼查詢。
4.在逆地理編碼回調中設置定位標註的title和subtitle。
所有源代碼:
import UIKit let APIKey = "8a1383b14466a8dbf362f44357c496c0" class ViewController: UIViewController ,MAMapViewDelegate, AMapSearchDelegate{ var mapView:MAMapView? var search:AMapSearchAPI? var currentLocation:CLLocation? override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. MAMapServices.sharedServices().apiKey = APIKey initMapView() initSearch() } func initMapView(){ mapView = MAMapView(frame: self.view.bounds) mapView!.delegate = self self.view.addSubview(mapView!) let compassX = mapView?.compassOrigin.x let scaleX = mapView?.scaleOrigin.x //設置指南針和比例尺的位置 mapView?.compassOrigin = CGPointMake(compassX!, 21) mapView?.scaleOrigin = CGPointMake(scaleX!, 21) // 開啓定位 mapView!.showsUserLocation = true // 設置跟隨定位模式,將定位點設置成地圖中心點 mapView!.userTrackingMode = MAUserTrackingModeFollow } // 初始化 AMapSearchAPI func initSearch(){ search = AMapSearchAPI(searchKey: APIKey, delegate: self); } // 逆地理編碼 func reverseGeocoding(){ let coordinate = currentLocation?.coordinate // 構造 AMapReGeocodeSearchRequest 對象,配置查詢參數(中心點座標) let regeo: AMapReGeocodeSearchRequest = AMapReGeocodeSearchRequest() regeo.location = AMapGeoPoint.locationWithLatitude(CGFloat(coordinate!.latitude), longitude: CGFloat(coordinate!.longitude)) println("regeo :\(regeo)") // 進行逆地理編碼查詢 self.search!.AMapReGoecodeSearch(regeo) } // 定位回調 func mapView(mapView: MAMapView!, didUpdateUserLocation userLocation: MAUserLocation!, updatingLocation: Bool) { if updatingLocation { currentLocation = userLocation.location } } // 點擊Annoation回調 func mapView(mapView: MAMapView!, didSelectAnnotationView view: MAAnnotationView!) { // 若點擊的是定位標註,則執行逆地理編碼 if view.annotation.isKindOfClass(MAUserLocation){ reverseGeocoding() } } // 逆地理編碼回調 func onReGeocodeSearchDone(request: AMapReGeocodeSearchRequest!, response: AMapReGeocodeSearchResponse!) { println("request :\(request)") println("response :\(response)") if (response.regeocode != nil) { var title = response.regeocode.addressComponent.city var length: Int{ return countElements(title) } if (length == 0){ title = response.regeocode.addressComponent.province } //給定位標註的title和subtitle賦值,在氣泡中顯示定位點的地址信息 mapView?.userLocation.title = title mapView?.userLocation.subtitle = response.regeocode.formattedAddress } } }
所有源碼下載:https://github.com/hadesh/MyRoute
一、訪問申請KEY地址:http://lbs.amap.com/console/key/
二、輸入真實應用名稱,選擇iOS SDK平臺服務。
三、獲取Bundle Indentifier
獲取方式1、代碼獲取
NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];
獲取方式2、Xcode切換到General標籤,查看Bundle Identifier
四、點擊獲取KEY按鈕。
---------------------------------------------------------------------------------------------------------------------------------
即日起至2016/10/31止,凡註冊成爲高德開發者的新用戶,便可獲贈1張阿里雲優惠券,可享受最低6折購買阿里雲產品。數量有限,發完即止。詳情點擊:http://lbsbbs.amap.com/forum.php?mod=viewthread&tid=20143
---------------------------------------------------------------------------------------------------------------------------------