第一步:申請Key,用于搜索SDK。
員工經(jīng)過長期磨合與沉淀,具備了協(xié)作精神,得以通過團(tuán)隊的力量開發(fā)出優(yōu)質(zhì)的產(chǎn)品。成都創(chuàng)新互聯(lián)堅持“專注、創(chuàng)新、易用”的產(chǎn)品理念,因為“專注所以專業(yè)、創(chuàng)新互聯(lián)網(wǎng)站所以易用所以簡單”。公司專注于為企業(yè)提供網(wǎng)站設(shè)計制作、做網(wǎng)站、微信公眾號開發(fā)、電商網(wǎng)站開發(fā),微信小程序定制開發(fā),軟件定制網(wǎng)站等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。
提示:MapKit是不需要Key的,該key僅用于高德的iOS SDK搜索功能。
第二步:初始化MKMapView ,并添加到Subview。同時,進(jìn)行定位,設(shè)置定位模式,在地圖上顯示定位點。
注意:
(1)MapKit中的定位(showUserLocation= YES),在回調(diào)中獲取的坐標(biāo)不用進(jìn)行坐標(biāo)偏轉(zhuǎn);若使用CLLocationManager方法進(jìn)行定位,需要進(jìn)行坐標(biāo)偏轉(zhuǎn)(參考附加內(nèi)容)。
(2)MapKit沒有申請定位權(quán)限,需在代碼中申請一下定位權(quán)限。
申請方法:在 info.plist中追加NSLocationWhenInUseUsageDescription或NSLocationAlwaysUsageDescription字段。其中:
NSLocationWhenInUseUsageDescription表示應(yīng)用在前臺的時候可以搜到更新的位置信息。
NSLocationAlwaysUsageDescription表示應(yīng)用在前臺和后臺(suspend或terminated)都可以獲取到更新的位置數(shù)據(jù)。
代碼如下:
//申請定位權(quán)限
- (void) initLocation
{
if(nil == _locationManager)
{
_locationManager = [[CLLocationManager alloc] init];
}
if([[[UIDevice currentDevice] systemVersion] floatValue] = 8.0)
{
[_locationManager requestAlwaysAuthorization];
}
}
//初始化MapView
- (void) initMapView{
//構(gòu)造MKMapView
_mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 21, CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds))];
_mapView.delegate = self;
_mapView.showsUserLocation = YES;//顯示定位圖標(biāo)
[_mapView setUserTrackingMode:MKUserTrackingModeFollow];//設(shè)置定位模式
//將mapview添加到Subview中
[self.view addSubview:_mapView];
}
第三步:初始化主搜索對象AMapSearchAPI
構(gòu)造AMapSearchAPI對象,并設(shè)置搜索結(jié)果語言。(支持英文結(jié)果的搜索功能包括:POI搜索、逆地理編碼和地理編碼、輸入提示,能夠滿足基本的搜索功能)
//初始化AMapSearchAPI
- (void)initSearch
{
//構(gòu)造AMapSearchAPI
_search = [[AMapSearchAPI alloc] initWithSearchKey:APIKey Delegate:self];
_search.language = AMapSearchLanguage_en;//設(shè)置語言
}
第四步:構(gòu)造搜索對象,設(shè)置搜索參數(shù),發(fā)起查詢,在相應(yīng)的回調(diào)中進(jìn)行結(jié)果展示(如:POI查詢結(jié)果以大頭針標(biāo)注等等)。
以Demo中的POI查詢?yōu)槔?,以選擇的輸入提示語為關(guān)鍵字
/* POI 搜索. */
- (void)searchPOIWithKey:(NSString *)key adcode:(NSString *)adcode
{
if (key.length == 0)
{
return;
}
//構(gòu)造POI搜索對象AMapPlaceSearchRequest
AMapPlaceSearchRequest *place = [[AMapPlaceSearchRequest alloc] init];
//設(shè)置關(guān)鍵字、
place.keywords = key;
place.requireExtension = YES;//設(shè)置成YES,返回信息詳細(xì),較費流量
if (adcode.length 0)
{
place.city = @[adcode];
}
//發(fā)起查詢
[_search AMapPlaceSearch:place];
}
//回調(diào)中顯示結(jié)果
- (void)onPlaceSearchDone:(AMapPlaceSearchRequest *)request response:(AMapPlaceSearchResponse *)respons
{
if (respons.pois.count == 0)
{
return;
}
NSMutableArray *poiAnnotations = [NSMutableArray arrayWithCapacity:respons.pois.count];
[respons.pois enumerateObjectsUsingBlock:^(AMapPOI *obj, NSUInteger idx, BOOL *stop) {
[poiAnnotations addObject:[[POIAnnotation alloc] initWithPOI:obj]];
}];
/* 將結(jié)果以annotation的形式加載到地圖上. */
[_mapView addAnnotations:poiAnnotations];
/* 如果只有一個結(jié)果,設(shè)置其為中心點. */
if (poiAnnotations.count == 1)
{
_mapView.centerCoordinate = [poiAnnotations[0] coordinate];
}
/* 如果有多個結(jié)果, 設(shè)置地圖使所有的annotation都可見. */
else
{
[_mapView showAnnotations:poiAnnotations animated:NO];
}
}
第一部分 使用Swift語言開發(fā)LBS應(yīng)用 1、下載iOS地圖SDK的最新版本 2、申請LBS密鑰(見第二部分)。 3、xCode新建工程 新建一個 Single View Application 工程。注意:Language 選擇 Swift 4、工程配置 a.引入地圖庫搜索庫 左側(cè)目錄中選中工程名...
月底接到通知,晚餐補(bǔ)助由簽到改成釘釘打卡。
作為一名技術(shù)人員,不甘于寂寞的研究了一發(fā)釘釘遠(yuǎn)程打卡..
源于我的正(dan)直(xiao),我并未在實際工作中使用,僅作為研究實現(xiàn)了一發(fā)
做過地圖定位相關(guān)App的童鞋都應(yīng)該了解 Xcode - 工具欄 - Debug - Simulate Location
它的作用是用于虛擬定位,以便于不用親臨其地模擬到達(dá)某個坐標(biāo)。
同時釘釘打卡定位打卡的原理,是基于你是否到達(dá)了以公司地理坐標(biāo)為圓心的某個圓。在此范圍內(nèi),員工可進(jìn)行打卡。
我們需要做的是使用百度、高德或者谷歌地圖獲取到打卡位置的GPS坐標(biāo),然后使用算法轉(zhuǎn)換成iPhone所需要的坐標(biāo)WGS-84。
然后在Simulate Location使用這個打卡坐標(biāo)模擬打卡。
整個遠(yuǎn)程打卡的流程到此就結(jié)束了,當(dāng)開啟模擬定位之后,你會發(fā)現(xiàn)所有APP的定位均換成了這個定位,不用擔(dān)心,當(dāng)結(jié)束項目之后稍等一下就會回到準(zhǔn)確的定位。
有不明白的在評論中回復(fù)即可,對你有幫助的話麻煩star一下哦
1、下載iOS地圖SDK的最新版本
2、申請LBS密鑰(見第二部分)。
3、xCode新建工程
新建一個 Single View Application 工程。注意:Language 選擇 Swift
4、工程配置
a.?引入地圖庫搜索庫
左側(cè)目錄中選中工程名,在 TARGETS-Build Phases- Link Binary With Libaries 中點擊“+”按鈕,在彈出的窗口中點擊“Add Other”按鈕,選擇解壓后的 MAMapKit.framework 文件添加到工程中。
搜索庫的添加方法同上。
b.引入AMap.bundle資源文件
AMap.bundle資源文件中存儲了定位、默認(rèn)大頭針標(biāo)注視圖等圖片,可利用這些資源圖片進(jìn)行開發(fā)。
左側(cè)目錄中選中工程名,在右鍵菜單中選擇Add Files to “工程名”…,從 MAMapKit.framework-Resources 文件夾中選擇 AMap.bundle文件,并勾選“Copy items if needed”復(fù)選框,單擊“Add”按鈕,將資源文件添加到工程中。
c.引入系統(tǒng)庫
左側(cè)目錄中選中工程名,在TARGETS-Build Settings- Link Binary With Libaries中點擊“+”按鈕,在彈出的窗口中查找并選擇所需的庫(見下表),單擊“Add”按鈕,將庫文件添加到工程中。
說明:
備注中,2D表示使用2D柵格地圖需要的系統(tǒng)文件,3D表示使用3D矢量地圖需要的系統(tǒng)文件、Search表示使用搜索庫需要的系統(tǒng)文件。
SystemConfiguration.framework、CoreTelephonySecurity.framework、Security.framework 是為了統(tǒng)計app信息使用。
d.Swift編譯配置
首先:新建橋接頭文件(放在工程路徑下),這里命名為 AMapDemoSwift-Bridging-Header.h,在該頭文件中import需要的庫文件,代碼如下:
#import MAMapKit/MAMapKit.h
#import AMapSearchKit/AMapSearchAPI.h
然后,左側(cè)目錄中選中工程名,在 TARGETS-Build Phases- Swift Compiler - Code Generation - Objective-C Briding Header 中輸入橋接文件的路徑
5、地圖的顯示
以3D矢量地圖SDK為例,進(jìn)行介紹。
在 ViewController.swift 中,繼承 MAMapViewDelegate 協(xié)議,在 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!)
}
}
運行程序,地圖顯示出來了,就是這樣簡單~