iOS根據地址在地圖上展示座標
遇到一個需求,給出起點和終點的位置,需要在地圖中展示出來,並有導航功能。
首先需要把位置轉化成經緯度,這個可以使用系統提供的方法,需要引入框架#import <MapKit/MapKit.h>
,
// address為具體地址名稱
NSString *address;
[myGeocoder geocodeAddressString:oreillyAddress completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
if ([placemarks count] > 0 && error == nil) {
CLPlacemark *firstPlacemark = [placemarks objectAtIndex:0];
// coord即為得到到座標
CLLocationCoordinate2D coord;
coord.latitude = firstPlacemark.location.coordinate.latitude;
coord.longitude = firstPlacemark.location.coordinate.longitude;
// 由於專案中使用到是百度地圖,需要把座標轉化為百度地圖到座標
CLLocationCoordinate2D baiduCoor;
baiduCoor = [self changeBaiDuGPS:coord];
} else if ([placemarks count] == 0 && error == nil) {
NSLog(@"Found no placemarks.");
} else if (error != nil) {
NSLog(@"An error occurred = %@", error);
}
}];
// 座標轉化方法
- (CLLocationCoordinate2D)changeBaiDuGPS:(CLLocationCoordinate2D)coor {
//轉換國測局座標(google地圖、soso地圖、aliyun地圖、mapabc地圖和amap地圖所用座標)至百度座標
NSDictionary* testdic = BMKConvertBaiduCoorFrom(coor,BMK_COORDTYPE_COMMON);
//轉換後的百度座標
CLLocationCoordinate2D baiduCoor = BMKCoorDictionaryDecode(testdic);
return baiduCoor;
}
同樣通過上面的方法可以得到起始點的座標和終點的座標,把座標展示到地圖上:
startPoint = [[BMKPointAnnotation alloc] init];
startPoint.coordinate = startCoor;
[_mapView addAnnotation:startPoint];
endPoint = [[BMKPointAnnotation alloc] init];
endPoint.coordinate = endCoor;
[_mapView addAnnotation:endPoint];
大頭針已經新增到地圖上了,下面需要自定義大頭針的樣式,需要新增百度地圖代理_mapView.delegate = self;
:
// BMKMapViewDelegate
- (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id<BMKAnnotation>)annotation {
if (annotation == startPoint) {
NSString *AnnotationViewID = @"renameMark";
BMKAnnotationView *annotationView = (BMKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];
annotationView.frame = CGRectMake(0, 0, 30, 30);
if (annotationView == nil) {
annotationView = [[BMKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];
annotationView.image = [UIImage imageNamed:@"map_start"];
}
return annotationView;
} else if (annotation == endPoint) {
NSString *AnnotationViewID = @"renameMark";
BMKAnnotationView *annotationView = (BMKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];
annotationView.frame = CGRectMake(0, 0, 30, 30);
if (annotationView == nil) {
annotationView = [[BMKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];
annotationView.image = [UIImage imageNamed:@"map_end"];
}
return annotationView;
}
return nil;
}
頁面展示基本上完成了,導航功能需要跳轉到相應app就可以,目前我只做了跳轉到百度地圖和系統自帶地圖,跳轉相應app需要在plist檔案中設定
跳轉選項使用
UIAlertController
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
[alertController addAction:[UIAlertAction actionWithTitle:@"使用蘋果地圖" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
[self jumpAppleMap];
}]];
[alertController addAction:[UIAlertAction actionWithTitle:@"使用百度地圖" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
[self jumpBaiduMap];
}]];
[alertController addAction: [UIAlertAction actionWithTitle: @"取消" style: UIAlertActionStyleCancel handler:nil]];
[self presentViewController: alertController animated: YES completion: nil];
跳轉到蘋果地圖,此時使用的座標為系統根據文字轉換的座標,不必使用百度地圖的座標:
- (void)jumpAppleMap {
MKMapItem *startLocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:iosStartCoor addressDictionary:nil]];
MKMapItem *toLocation = [[MKMapItem alloc] initWithPlacemark:[[MKPlacemark alloc] initWithCoordinate:iosEndCoor addressDictionary:nil]];
[MKMapItem openMapsWithItems:@[startLocation, toLocation] launchOptions:@{MKLaunchOptionsDirectionsModeKey: MKLaunchOptionsDirectionsModeDriving, MKLaunchOptionsShowsTrafficKey: [NSNumber numberWithBool:YES]}];
}
跳轉到百度地圖,此時需要使用轉化後的百度地圖座標:
- (void)jumpBaiduMap {
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://map/"]]) {
NSString *urlString = [NSString stringWithFormat:@"baidumap://map/direction?origin=%f,%f&destination=%f,%f&&mode=driving",startCoor.latitude,startCoor.longitude,endCoor.latitude,endCoor.longitude];
NSURL *url = [NSURL URLWithString:urlString];
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
} else {
// 沒有安裝百度地圖,無法開啟
}
}
這樣程式便會跳轉到相應APP,並進入到導航功能。
相關文章
- openlayers根據座標在地圖上劃區域地圖
- ArcGIS API for JavaScript根據兩個點座標在地圖上畫線APIJavaScript地圖
- ArcGIS API for Silverlight 中根據座標點在地圖上打標記API地圖
- 百度地圖:根據位置獲取座標地圖
- asp.net系統中根據經緯度座標,直接呼叫google地圖,顯示位置ASP.NETGo地圖
- iOS中地圖經緯度座標轉換iOS地圖
- iOS根據兩點經緯度座標計算指南針方位角iOS
- HTML網頁根據座標模擬滑鼠點選HTML網頁
- 騰訊地圖定位及座標解析地圖
- 騰訊地圖拾取座標地圖
- js中根據x,y 座標模擬點選事件JS事件
- 根據經緯度座標查詢最近的門店
- js根據經緯度,獲取省市區。(百度地圖逆地址解析)JS地圖
- Qt/C++地址轉座標/座標轉地址/逆地址解析/支援百度高德騰訊和天地圖QTC++地圖
- 高德地圖上展示終端資訊地圖
- sld樣式之根據id展示不同樣式,大於10000展示標註
- D3.js在svg地圖上標點JSSVG地圖
- 百度地圖框選標註座標點功能地圖
- 百度地圖之標註一組地理座標地圖
- R語言:根據經緯度在世界地圖上畫出各個點R語言地圖
- iOS根據圖片比例計算顯示大小iOS
- JN專案-百度地圖座標偏移地圖
- 地圖投影系列介紹(二)_ 地理座標系地圖
- 根據URL地址生成二維碼
- js根據IP地址判斷城市JS
- php根據地理座標獲取國家、省份、城市,及周邊資料類PHP
- (IOS)根據bundle中的檔名讀取圖片iOS
- ArcGIS地圖投影與座標系轉換的方法地圖
- 在地圖上使圖片透明地圖
- 根據MAC地質反查IP工具-LanHelperMac
- 爬蟲實現:根據IP地址反查域名爬蟲
- js根據ip地址獲取所在城市JS
- 百度地圖根據經緯度計算瓦片行列號地圖
- windows 根據標題,關閉程式Windows
- element-plus table部分列根據介面返回key展示
- iOS 地圖定位 地圖iOS地圖
- dcat欄位擴充套件:地圖拖拽設定xy座標套件地圖
- 【地圖API】為何您的座標不準?如何糾偏?地圖API