1. 程式人生 > >iOS開發——高德地圖調研之顯示地圖、定位與地理編碼等

iOS開發——高德地圖調研之顯示地圖、定位與地理編碼等

在 檔案中加入(**注意2D地圖和3D地圖不能同時使用
od 'AMap3DMap' #3D地圖SDK
pod 'AMap2DMap' #2D地圖SDK(2D地圖和3D地圖不能同時使用)
pod 'AMapSearch' #搜尋服務SDK
然後進行下載
然後開啟字尾為.xcworkspace工程
程式碼如下
/*主要內容
 1.顯示地圖
 2.使用MAMapView定位功能{
 有四步:第一步: 開啟定位也就是showUserLocation屬性
        第二步: iOS8以上的系統需要在info.plist新增欄位,如果你只需要在使用者使用app時,開啟定位。你只需要新增NSLocationWhenInUseUsageDescription這個欄位,如果你在使用者不使用app時還需要定位時,那麼就需要新增NSLocationAlwaysUsageDescription這個欄位
 
        第三步:獲取到定位點的經緯度座標
             當位置更新時,會進定位回撥,通過MAMapView的代理回撥函式,能獲取到定位點的經緯度座標
             -(void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation
             updatingLocation:(BOOL)updatingLocation
         第四步:定位的模式(有3種,也是MAMapView的屬性)
                 定點陣圖層有3種顯示模式,分別為:
                 
                 MAUserTrackingModeNone:不跟隨使用者位置,僅在地圖上顯示。
                 MAUserTrackingModeFollow:跟隨使用者位置移動,並將定位點設定成地圖中心點。
                 MAUserTrackingModeFollowWithHeading:跟隨使用者的位置和角度移動。
}
 3.逆地理編碼(把地理座標編碼成地址,把使用者當前地址顯示出來)  
   使用 search來實現地理編碼的查詢介面和逆地理編碼查詢的介面進行編碼的實現
 */


#import "ViewController.h"
//準備工作第一步 首先引入標頭檔案
#import <MAMapKit/MAMapKit.h>
#import <AMapSearchKit/AMapSearchAPI.h>
//準備工作第二步 協議 定義一個巨集 標識KEY
#define APIKey  @"2dbcec0dc4b8374c1f6c45e4b11c78ff"
@interface ViewController ()<MAMapViewDelegate>
//設定私有地圖變數
{
    MAMapView *_mapView;
    UIButton *_locationBUtton;
    //初始化search物件
    AMapSearchAPI *_search;
    //宣告一個變數
    CLLocation *_currentLocation;
    
}
@end

//準備工作第三步 在ViewController.m檔案相應的方法中進行地圖初始化
@implementation ViewController
// 程式碼實現第一步:MAMapView(初始化地圖)
/*
  一個可嵌入的地圖物件
  功能:可以用來顯示地圖和對地圖內容進行操作
 初始化:
 初始化地圖時,一般需要指定地圖嵌入的位置和大小
 - (instancetype)initWithFrame:(CGRect)frame;
 主要的屬性:(有兩個)
 1:中心經緯度座標CenterCoordinate (指的是地圖中心點的位置它的經緯度座標)
  @property (nonatomic)CLLocationCoordinate2D centerCoordinate;
 2:縮放級別ZoomLevel (指的是在固定的View大小範圍之內顯示的地圖範圍是多少,縮放級別越小,顯示地圖範圍越大)
   @property (nonatomi) CGFloat zoomLevel;
 兩個附件
 1:指南針
 @property (nonatomic) CGPoint compassOrigin;
 2:比例尺
 @property (nonatomic) CGPoint scaleOrigin;
 */

- (void)initMapView{

    //******
    [MAMapServices sharedServices].apiKey = APIKey;
    
    _mapView = [[MAMapView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds))];
    //其次  設定地圖的代理 和兩個外掛的位置
    _mapView.delegate = self;
    
    _mapView.compassOrigin = CGPointMake(_mapView.compassOrigin.x, 22);
    _mapView.scaleOrigin = CGPointMake(_mapView.scaleOrigin.x, 22);
    
    [self.view addSubview:_mapView];
// 此時執行時 APIkEY 會有一個對話方塊告訴你APIKey為空
    
    //開啟使用者定位
    _mapView.showsUserLocation = YES;
}
- (void)initSearch{

    //也需要使用KEY(可以與MAMapViewKEY相同)
    _search = [[AMapSearchAPI alloc] initWithSearchKey:APIKey Delegate:self];
//    接下來需要獲取到使用者當前所在地的經緯度
//    需要使用MAMapView的回撥方法
}
//位置或者裝置方向更新後,會呼叫此函式。
//引數mapView	地圖 view。
   //userLocation	使用者定位資訊(包括位置與裝置方向等資料)。
- (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation{
    NSLog(@"%@",userLocation.location);
    //將使用者位置資訊存入變數中
    _currentLocation = userLocation.location;
    NSLog(@"%d",updatingLocation);

}
//進行逆地理編碼請求
- (void)reGeoAction{

    if (_currentLocation) {
        AMapReGeocodeSearchRequest *request = [[AMapReGeocodeSearchRequest alloc] init];
        request.location = [AMapGeoPoint locationWithLatitude:_currentLocation.coordinate.latitude longitude:_currentLocation.coordinate.longitude];
        //逆地理編碼搜尋請求
        [_search AMapReGoecodeSearch:request];
        //同樣Search也有回撥方法
        /*
         void) 	- search:error:
         通知查詢成功或失敗的回撥函式。已廢棄。 更多...
         
         (void) 	- searchRequest:didFailWithError:
         當請求發生錯誤時,會呼叫代理的此方法。 更多...
         
         (void) 	- onPlaceSearchDone:response:
         POI 查詢回撥函式。 更多...
         
         (void) 	- onNavigationSearchDone:response:
         路徑查詢回撥函式。 更多...
         
         (void) 	- onInputTipsSearchDone:response:
         輸入提示查詢回撥函式。 更多...
         
         (void) 	- onGeocodeSearchDone:response:
         地理編碼查詢回撥函式。 更多...
         
         (void) 	- onReGeocodeSearchDone:response:
         逆地理編碼查詢回撥函式。 更多...
         
         (void) 	- onBusLineSearchDone:response:
         公交線路查詢回撥函式。 更多...
         
         (void) 	- onBusStopSearchDone:response:
         公交站點查詢回撥函式。 更多...
         
         (void) 	- onDistrictSearchDone:response:
         行政區域查詢回撥函式。 更多...
         */
    }

}
- (void) onReGeocodeSearchDone:(AMapReGeocodeSearchRequest *)request response:(AMapReGeocodeSearchResponse *)response{

    NSLog(@"request:%@",request);
    NSString *title = response.regeocode.addressComponent.city;
    if (title.length == 0) {
        title = response.regeocode.addressComponent.province;
    }
    _mapView.userLocation.title = title;
    _mapView.userLocation.subtitle = response.regeocode.formattedAddress;
    
}
//MAMapView的回撥方法:當地圖上的標記被選中時
- (void)mapView:(MAMapView *)mapView didSelectAnnotationView:(MAAnnotationView *)view{
    //判斷當前選中定位annotation的時候進行逆地理編碼
    if ([view.annotation isKindOfClass:[MAUserLocation class]]){
        [self reGeoAction];
    }else{
    
        NSLog(@"%@",view.annotation);
    
    }

}
- (void)initControls{

    _locationBUtton = [UIButton buttonWithType:UIButtonTypeCustom];
    _locationBUtton.frame = CGRectMake(20, CGRectGetHeight(_mapView.bounds) - 80, 40, 40);
    _locationBUtton.backgroundColor = [UIColor purpleColor];
    [_locationBUtton addTarget:self action:@selector(locationAction) forControlEvents:UIControlEventTouchUpInside];
    [_mapView addSubview:_locationBUtton];

}
//主要作用,修改定位模式
- (void)locationAction{
    if(_mapView.userTrackingMode != MAUserTrackingModeFollow)
    {
        [_mapView setUserTrackingMode:MAUserTrackingModeFollowWithHeading animated:YES];
        NSLog(@"%ld",_mapView.userTrackingMode);
    }
}
//當改變定位模式時回撥的方法
- (void)mapView:(MAMapView *)mapView didChangeUserTrackingMode:(MAUserTrackingMode)mode animated:(BOOL)animated{

    
    NSLog(@"%ld===%d",mode , MAUserTrackingModeFollowWithHeading);
    if (mode == MAUserTrackingModeFollow){
    
    
        [_locationBUtton setImage:[UIImage imageNamed:@"
[email protected]
"] forState:UIControlStateNormal]; } } - (void)viewDidLoad { [super viewDidLoad]; [self initMapView]; [self initSearch]; [self initControls]; /* 1、iOS9為了增強資料訪問安全,將所有的http請求都改為了https,為了能夠在iOS9中正常使用地圖SDK,請在"Info.plist"中進行如下配置,否則影響SDK的使用。 <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> 2、在iOS9中為了能正常調起高德地圖App的功能,必須在"Info.plist"中將高德地圖App的URL scheme列為白名單,否則無法調起,配置如下: <key>LSApplicationQueriesSchemes</key> <array> <string>iosamap</string> </array> */ // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end

相關推薦

iOS開發——地圖調研顯示地圖定位地理編碼

在 檔案中加入(**注意2D地圖和3D地圖不能同時使用) od 'AMap3DMap' #3D地圖SDK pod 'AMap2DMap' #2D地圖SDK(2D地圖和3D地圖不能同時使用) pod 'AMapSearch' #搜尋服務SDK 然後進行下載 然後開啟字尾為.xcworkspace工程 程式碼如下

iOS開發:PDF檔案的載入及顯示(網路本地)

話說,公司專案需要顯示PDF檔案,於是遍尋了網路,發現的方法以下幾種: 1.使用UIWebView載入,沒啥說的,根據檔案路徑,網路或者本地皆可,建立一個NSURLRequest,然後用webView載入就可以了,但僅僅能顯示檔案,很low; 2.使用UID

iOS地圖MAMapKit的使用:地圖顯示新增大頭針導航定位功能介紹

4、 引入高德地圖依賴系統庫檔案: 說明: 1.備註中,2D表示使用2D柵格地圖需要的系統檔案,3D表示使用3D向量地圖需要的系統檔案、Search表示使用搜索庫需要的系統檔案,3D(V3.X.X)表示3D向量地圖V3.0.0以後版本需要新增的庫。 2.SystemConfiguration.f

iOS地圖API簡單開發(一)

最近看了看高德地圖的開發平臺以及它們的API,奇怪的是一直沒找到語音API,這個問題放到以後再說吧。 對於高德地圖的開發平臺,它們提供的說明文件還算健全,而且由於API是國人開發的,所以所有介面都有中文的介面說明,很是容易理解。只不過,在載入它們的第三方庫時,總是一個功能一

iOS呼叫地圖導航

    在iOS開發地圖模組中,有需要用到導航的功能,尤其類似一些送快遞、外賣等軟體,除了需要展示路線到地圖中,還需要有一個導航按鈕。一般導航功能分兩類:一類是在本APP內部呼叫高德API的導航頁面,即在APP內部整合導航模組,此類導航頁面可以自己定製介面,但基本功能都是呼叫

iOS系統地圖的使用

重要的寫在前面,整理了一下系統高德地圖的一般使用,相關demo請點選demo連結 ,已經更新了Swift版本。 1. 地圖(MKMapView)的使用 self.mapView.mapType =

iOS獲取地圖實現持續定位功能

首先,根據高德地圖開發平臺在Xcode裡面配置相應的環境 自動部署用cocoapods,請按照http://lbs.amap.com/api/ios-location-sdk/guide/create-project/cocoapods 手動部署請按照http://lbs.

iOS開發點選按鈕從左側顯示個人中心檢視

需求說明:點選導航欄左邊的按鈕時,從左側顯示半屏(自定義寬度)檢視,場景為常見的個人中心等 思路選擇:可以選擇自定義一個檢視,設定長度為(kScreenWidth - 任意數值),點選的時候將檢視新增到UIWindow上 問題分析:一般個人中心檢視為tableView等檢視時,肯

android跳轉手機百度騰訊谷歌地圖地圖傳座標座標偏移base64解碼相關

調起百度的native app http://developer.baidu.com/map/uri-introandroid.htm#idmykey47 座標轉換 http://api.map.baidu.com/ag/coord/convert?from=2&

ios開發 button或UIimageview載入圖片顯示顏色不顯示圖片

因為預設情況下,系統會對圖片進行渲染,所以對於我們可以更改空間的樣式 如圖,將type從system修改到custom 或者使用程式碼進行修改  [button setImage:[image im

iOS開發學習NSTimer失效NSTimerrunloop之間的關係解密NSTimer

1. 今天在開發的時候,遇到NSTimer無效、所以也到網上找了一些資料,看看究竟怎麼回事兒、     再次也做一次分享、方便有需要的朋友。  1.   NSTimer是做什麼的? 1.簡單的理解就是一個定時器,在開發過程中,特定時間或者週期性去執行一個任務。    一次性

iOS開發————資料本地化儲存方式Keychain

iOS的keychain服務提供了一種安全的儲存私密資訊(密碼,序列號,證書等)的方式,每個ios程式都有一個獨立的keychain儲存。相對於NSUserDefaults、檔案儲存等一般方式,keychain儲存更為安全,而且keychain裡儲存的資訊不會因App被刪除

android百度地圖開發——地圖sdk基礎地圖

上一節我們介紹了百度定位sdk,這一節我們在定位的基礎上介紹百度地圖sdk。 讓地圖顯示出來 首先把上一節佈局檔案中新增的textview刪掉,然後加入MapView這個控制元件: <?xml version="1.0" encoding="

iOS開發遇到的那些坑 NSURLRequest開發URL編碼

前言:專案中遇到一個根據傳遞的引數下載指定的PDF文件的介面,但是折騰啊!!!無論我用AFN下載還是直接用NSURLRequest都老是下載不了,後來和伺服器工程師聯調找到原因是編碼問題,如下,封裝一個編碼類在拼接引數的時候對其編碼,折騰半天終於下載成功ing!!!記錄下來

iOS開發筆記--UIImageView的屬性animationImages詳解

 animationImages是陣列型別,該陣列必須包含的UIImage物件。您可以使用相同的影象物件多次在陣中。 例如:將一系列幀新增到一個數組裡面,然後設定animation一系列屬性,如動畫時間,動畫重複次數,還是看程式碼吧,直觀 NSArray *magesArr

API調研

駕車路徑規劃 http://lbs.amap.com/api/webservice/guide/api/direction/#driving 例子: http://restapi.amap.com/v3/direction/driving?key=959e9ee93388f4bd5a144aabcc

使用谷歌的地圖 衛星標準進行切換

shee 進行 .cn 1.0 疊加 pad mar css visible 高德地圖使用谷歌瓦片的方法 <!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-

pyton全棧開發從入門到放棄數據類型變量

映射類 分隔 無法 列表常用操作 可用 內置 鏈式 無需 上一個 一.變量 1 什麽是變量之聲明變量 #變量名=變量值 age=18 gender1=‘male‘ gender2=‘female‘ 2 為什麽要有變量變量作用:“變”=>變化,“量”=>計量

iOS開發:常用的UIView控制元件——UILabelUITextFieldUIButton

前面幾篇文章已經對iOS開發中比較基本的幾個檔案進行了瞭解,今天主要學習StoryBoard檔案和幾個常見的UI控制元件。 Storyboard功能是在iOS5開始新增的功能,一種新技術的出現大多是為了彌補舊技術的不足,而在storyboard之前iOS 開發設計介面是使用nib檔案(xib

ios 整合百度地圖(獲取定位,反向地理編碼

原因 :之所以使用百度地圖,是因為當時使用蘋果自帶的定位給後臺傳經緯度,後臺用百度解析誤差比較大,所以換成了百度地圖 本文主要講解下cocoapods 整合 看詳細整合請點選(cocoapod整合連結) 1 、首先去百度地圖開放平臺註冊賬戶 點選立即使用 然後註冊 2、然後進行郵箱啟用