1. 程式人生 > >AMap高德地圖自定義指標,定位mapview新方法!

AMap高德地圖自定義指標,定位mapview新方法!

最近公司需要做範圍內打卡的功能,所以研究了下高德地圖的SDK,首先註冊申請key就不多講了,百度有很詳細的資料,下面主要記錄下實現方法。demo地址在最下方:下載後自行更新cocoapod檔案下載依賴即可執行

包含功能1、定位 2、逆地理位置3、設定範圍打卡 4、自定義指標選定位置

我用的是pod管理工程,這是所有的sdk檔案

pod 'AFNetworking'

pod 'FMDB'

pod 'YYKit'

pod 'AMap3DMap'

pod 'AMapSearch'

更新下載好cocoapod依賴之後在appdelegate裡面設定關鍵key

// 配置高德地圖

[AMapServices

sharedServices].apiKey =@"*********************";

這樣我們就可以正常的寫我們的方法了,寫一個介面,裡面顯示我們的地圖,定位資訊

在這裡我們用的是MAMapView,而不是用的manager網上有很多方法都是用的manager,我感覺既然有地圖試圖為什麼不直接用呢?

// 設定打卡地點經緯度

@property (nonatomic,strong)NSString *localLongitude;

@property (nonatomic,strong)NSString *localLatitude;


// 高德地圖

@property (nonatomic

,strong)MAMapView *mapView;

//全域性的大頭針

@property(nonatomic,strong)MAPointAnnotation *pointAnnotation;

// 定位當前位置的經緯度

@property (nonatomic,strong)NSString *userLongitude;

@property (nonatomic,strong)NSString *userLatitude;


在viewdidappear裡面家在資訊

// 進入介面就以定位點為地圖中心

[self.mapViewsetCenterCoordinate:CLLocationCoordinate2DMake

([self.userLatitudefloatValue], [self.userLongitudefloatValue])animated:NO];

// 將繪製的圖形新增到地圖上

[self.mapViewaddOverlays:self.circles];


在viewdidload載入地圖資訊

// https配置

[AMapServicessharedServices].enableHTTPS =YES;

// 初始化地圖

self.mapView = [[MAMapViewalloc]initWithFrame:CGRectMake(0,NAVIGATIONBAR_HEIGHT,SCREEN_WIDTH,SCREEN_HEIGHT -NAVIGATIONBAR_HEIGHT)];

self.mapView.delegate =self;

// 顯示定位小藍點

self.mapView.showsUserLocation =YES;

self.mapView.showsCompass =NO;

//建立手勢物件

UILongPressGestureRecognizer *tap =[[UILongPressGestureRecognizeralloc]initWithTarget:selfaction:@selector(longPress:)];

[_mapViewaddGestureRecognizer:tap];

//全域性的大頭針

_pointAnnotation = [[MAPointAnnotationalloc]init];

_pointAnnotation.coordinate =CLLocationCoordinate2DMake([self.userLatitudedoubleValue], [self.userLongitudedoubleValue]);

[_mapViewaddAnnotation:_pointAnnotation];

[_mapViewsetCenterCoordinate:CLLocationCoordinate2DMake([self.userLatitudedoubleValue], [self.userLongitudedoubleValue])animated:YES];

// 追蹤使用者的location更新

self.mapView.userTrackingMode =MAUserTrackingModeFollow;

// 放大等級

[self.mapViewsetZoomLevel:16animated:YES];

[self.viewaddSubview:self.mapView];

下面是設定代理方法,動態開啟需要選中一個點作為開啟地點,我們新增一個長按手勢獲取動態位置,然後作為打卡點,通過獲得的經緯度逆地理位置資訊顯示在title上,然後與定位獲得的經緯度比較判定是否滿足打卡範圍。這樣就完整實現了定位打卡的功能。

下面是長按手勢方法

//自定義大頭針我這裡只是把大頭針變成一張自定義的圖片

- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id<MAAnnotation>)annotation

{

if ([annotationisKindOfClass:[MAPointAnnotationclass]])

{

staticNSString *reuseIndetifier =@"annotationReuseIndetifier";

MAAnnotationView *annotationView = (MAAnnotationView *)[mapViewdequeueReusableAnnotationViewWithIdentifier:reuseIndetifier];

if (annotationView ==nil)

{

annotationView = [[MAAnnotationViewalloc]initWithAnnotation:annotationreuseIdentifier:reuseIndetifier];

}

annotationView.image = [UIImageimageNamed:@"locationPoint_select"];

//設定中心點偏移,使得標註底部中間點成為經緯度對應點

annotationView.centerOffset =CGPointMake(0, -18);

return annotationView;

}

returnnil;

}


- (void)longPress:(UIGestureRecognizer*)gestureRecognizer{

//if (gestureRecognizer.state == UIGestureRecognizerStateEnded){

//return;

//}

[_mapViewremoveAnnotation:_pointAnnotation];

//座標轉換

CGPoint touchPoint = [gestureRecognizer locationInView:_mapView];

CLLocationCoordinate2D touchMapCoordinate =

[_mapViewconvertPoint:touchPointtoCoordinateFromView:_mapView];

_pointAnnotation.coordinate = touchMapCoordinate;

//_pointAnnotation.title = @"設定名字";

[_mapViewaddAnnotation:_pointAnnotation];

[selfsetLocationWithLatitude:touchMapCoordinate.latitudeAndLongitude:touchMapCoordinate.longitude];

}

- (void)setLocationWithLatitude:(CLLocationDegrees)latitude AndLongitude:(CLLocationDegrees)longitude{

NSString *latitudeStr = [NSStringstringWithFormat:@"%f",latitude];

NSString *longitudeStr = [NSStringstringWithFormat:@"%f",longitude];

NSLog(@"自己加的%@%@",latitudeStr,longitudeStr);

//反編碼經緯度---->位置資訊

CLLocation *location=[[CLLocationalloc]initWithLatitude:latitudelongitude:longitude];

CLGeocoder *geocoder=[[CLGeocoderalloc]init];

[geocoder reverseGeocodeLocation:locationcompletionHandler:^(NSArray *placemarks,NSError *error) {

if (error) {

NSLog(@"反編碼失敗:%@",error);

[selfpresentAlertControllerWithTitle:@"提示"message:[NSStringstringWithFormat:@"該網點經緯度資訊有誤,請重新標註"]cancelTitle:@"好的"];

}else{

self.localLatitude = latitudeStr;

self.localLongitude = longitudeStr;

// 重新繪製打卡範圍

[selfsetAddress];

//NSLog(@"反編碼成功:%@",placemarks);

CLPlacemark *placemark=[placemarkslastObject];

//NSLog(@"%@",placemark.addressDictionary[@"FormattedAddressLines"]);

NSDictionary *addressDic=placemark.addressDictionary;

NSString *state=[addressDicobjectForKey:@"State"];

NSString *city=[addressDicobjectForKey:@"City"];

NSString *subLocality=[addressDicobjectForKey:@"SubLocality"];

NSString *street=[addressDicobjectForKey:@"Street"];

NSString *Thoroughfare=[addressDicobjectForKey:@"Thoroughfare"];

NSString *strLocation;

if (street.length ==0 || street ==NULL || [streetisEqualToString:@"(null)"]) {

strLocation= [NSStringstringWithFormat:@"%@",subLocality];

}elseif (Thoroughfare.length ==0 || Thoroughfare == NULL || [ThoroughfareisEqualToString:@"(null)"]||([streetisEqualToString:Thoroughfare])){

strLocation= [NSStringstringWithFormat:@"%@%@",subLocality,street];

}else{

strLocation= [NSStringstringWithFormat:@"%@%@%@",subLocality,street,Thoroughfare];

}

NSLog(@"%@%@%@",state,city,strLocation);

self.title = strLocation;

}

}];

}

其他還有一些小功能,比如比例縮放,重新定位。離線地圖等

其他功能參考一下高德地圖,可是實現長按出現選定位置資訊,反編譯出地理資訊,名稱等。

demo地址(這招我跟別人學的,哈哈哈),關注公眾號,行走的java,回覆001獲得----多謝支援,共同學習一起進步,我不是為了流量主哦,裡面有很多幹貨,以後會更多!保你關注不虧!



相關推薦

AMap地圖定義指標定位mapview方法!

最近公司需要做範圍內打卡的功能,所以研究了下高德地圖的SDK,首先註冊申請key就不多講了,百度有很詳細的資料,下面主要記錄下實現方法。demo地址在最下方:下載後自行更新cocoapod檔案下載依

有關地圖定義mark載入網路圖片-心-乾貨

最近專案需要用到高德地圖,因為涉及到雲圖,整合的時候發現不少坑。這些坑基本上網上都有教程,或類似已經踩過的坑。 但是高德自定義圖示的時候只提供了。。 今天就來說說,一些度娘比較少的給mark載入網路上的圖片。 思路是這樣的: 首先,載入網路嘛,肯定要考慮用高德提供的 fro

地圖---定義飄窗

第一步繼承類MainActivity extends Activity implements OnInfoWindowClickListener,InfoWindowAdapter //給定位的mark新增infoWindow aMap.setOnInfoWindowClickList

地圖定義 marker 佈局里加載網路圖片不顯示的問題

服務端返回一組 marker 陣列,for 迴圈裡新增自定義佈局 marker到地圖上 要注意兩個原因不顯示 marker 1,要在圖片載入完後再把 佈局view新增到 marker 上 2,markerOption必須是 for 迴圈裡的變數,不能是全域性變數,不然

Android 地圖定義地圖覆蓋物(Marker)

先上效果圖,攝像頭和攝像頭上的預警事件紅點就是一個自定義佈局作為地圖的marker的圖示。                camera_red.png (素材圖) 官方提供的API參考手冊:http://

地圖定義Marker點選時出現的InfoWindow

1.自定義InfoWindowAdapter: package com.onetoo.www.onetoo.abapter.home; import android.content.Context;

Vue地圖定義覆蓋物使用例項-content的使用

本例使用content實現在高德地圖上自定義覆蓋物,即自定義marker。先看如下效果: 標題 在地圖上顯示三種顏色的marker:綠色,紫色,橙色。當點選其中的一個marker時,該Marker顏色變為藍色,size變大,並旋轉45度。再次點選其他marker時,之前

地圖定義annotation圖示

在寫lbs相關的app時,肯定會在地圖上標記一些座標點,有時候也需要根據需求來改變標記的外觀,這篇文章就是記錄了我使用高德地圖sdk的新增自定義樣式點標記時遇到的問題以及解決方法。我使用的開發語言是swift。 我的需求是要在一個地圖頁面上動態標記從網

地圖定義路網

思路:繪製折線顯示路網資訊 前提:已知線段起終點座標及路況狀態(一般通過顏色區分) 步驟: 1、按指導文件配置,顯示地圖(這裡就不講了) 2、監聽地圖狀態變化,獲取當前地圖狀態(主要是獲取縮放級別,變更線段粗細) aMap.setOnCameraC

地圖 定義點標記 圖示大小

<!doctype html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edg

地圖定義POI的樣式

 前段時間在開發一個地圖相關的軟體,本來要實現Poi搜尋完成後的高亮,類似高德官方的地圖,如下圖: 用高德的API一直不得要領,沒辦法,只好自己重新按marker的方法來實現,然後就沒有用高德API提供的POI搜尋類。下面貼出部分程式碼, /** * 目的地非同步搜尋

地圖定義infowindow之點選不彈出訊息框

今天在開發過程中,突然產品來了一句地圖上面有要回到以前,再點選Marker的時候需要顯示一個自定義的訊息框,這時候,原本帶著非常陽光的心情上班,結果天氣預報也有不準的時候,我頓時有想搞他的心都有了(之前是他說要去掉這個訊息框),但是作為碼農的我們,當然沒有這個能

地圖定義點聚合樣式Android

寫了Android高德地圖的點聚合功能 不廢話:直接上程式碼 private ClusterOverlay mClusterOverlay; private int clusterRadius = 100; private void dianjuheP

地圖定義樣式

首先,我們在高德地圖sdk中下載自定義地圖,並在build.gradle中引用。將下載的.data檔案放入assets資料夾下。關鍵來了,如何讀取自定義地圖。private void setMapCustomStyleFile(Context context) { S

Android實現地圖定義樣式

放置Android工程下的assets資料夾,在assets資料夾裡面建立了一個styleMap子資料夾。將裡面的檔案寫到sd卡中。 寫出檔案程式碼: try { // 先獲取系統

vue-amap 地圖定位 點選獲取經緯度和具體地址的使用

官方文件地址: 點這裡!!   經緯度獲取只要通過點選事件就可以通過e.lnglat來獲取,然後就是外掛Geocoder使用了。在main.js中initAMapApiLoader中寫入:AMap.Geocoder,注意 官方文件中有提示: 所以外掛中使用

地圖適應(setFitView)部分Marker顯示

高德地圖API提供了一個自適應的方法——setFitView,效果就是可以自動適應顯示你想顯示的範圍區域,舉個簡單的應用場景,比如一個點在海南,另一個點在東北,那麼使用了這個方法,顯示的將是從南到北的整個中國區域,而如果是一個點在天安門,另一個在故宮,使用這個方法後,那麼顯示

android 百度地圖定義更改預設圖示等常用方法

總結了一下百度地圖常用的方法(前提是整合百度地圖環境成功): 1:定位到已經經緯度,只需要改變LatLng的引數即可。有兩種方法: 方法1: //定義Maker座標點 LatLng point = new LatLng(39.96317

地圖】H5 Web端定位當前位置獲取GPS和地址資訊?

僅支援高階瀏覽器 首先註冊高德地圖開發者賬號,建立應用,獲取key 頁面中引入: <script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.3&key=您申請

地圖 android api 實現自動定位

浣熊我最近在研究高德地圖android api,看到第三章定位資訊後半部分關於“如何通過MyLocationOverlay 實現自動定位”的時候我凌亂了,寫得過於簡單,根本不知道如何操作。最後通過閱讀官方的示例程式碼和在網上搜集大量資料實現了地圖自動定位的功能。 開發指南