老闆最近非得整百度地圖,沒辦法找了些資料琢磨琢磨。使用百度地圖API首先要去百度官網下載API,並申請Key(按照百度官網的提示就行了)。
申請了key後,把百度的Demo下載下來,把裡面的key改成剛申請的,運行下試試。(提醒下,如果寫自己的程式時,編譯有很多錯誤的話,首先看看所需要的架構是否已全部加進去了,其次選擇工程->Target->
build settings -> Linking -> other linker flags 添加-all_load)
定位主要用到的是BMKMapView委託的函數-(void)mapView:(BMKMapView *)mapView didUpdateLocation:(BMKUserLocation *)userLocation,通過這個函數可以擷取到使用者的當前經緯度。
可能經緯度並不能滿足大家的要求,而是希望直接看到自己的位置是什麼地名。這就要用到BMKSerarc的委託類BMKSearchDelegate,先調用BMKSerach的reverseGeocode函數,然後在BMKSearchDelegate的-(void)
onGet
AddrResult: (BMKAddrInfo *)result errorCode: (int)error函數中獲得結果。
以下貼幾段關鍵代碼:
- (void)mapView:(BMKMapView *)mapView didUpdateUserLocation:(BMKUserLocation *)userLocation
{
localLatitude = userLocation.coordinate.latitude; //儲存擷取的經緯度
localLongitude = userLocation.coordinate.longitude;
if (userLocation != nil)
{
NSLog(@"%f %f", userLocation.location.coordinate.latitude, userLocation.location.coordinate.longitude);
}
[_mapView setCenterCoordinate:userLocation.coordinate animated:YES]; //使地圖移動到定位的地方
BOOL flag = [_search reverseGeocode:pt]; //反地理編碼 自動調用下面的委託函數擷取結果
if (!flag) {
NSLog(@"search failed!");
}
}
- (void)onGetAddrResult:(BMKAddrInfo *)result errorCode:(int)error
{
NSLog(@"%@",result.strAddr);
cityStr = result.addressComponent.streetName; //得到的街道名稱
cityStreetName = result.addressComponent.city; //所在城市名稱
NSLog(@"%@",cityStreetName);
NSLog(@"%@",cityStr);
NSLog(@"%@",result.addressComponent.streetNumber); //輸出所在城市街道門牌號
}
百度地圖還是很強大的,現在僅僅是管中窺豹而已,後面繼續添加功能。