我也遇到過(guò)同樣的問(wèn)題,后來(lái)是用Geocoding解決的
創(chuàng)新互聯(lián)公司主營(yíng)偃師網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶APP開發(fā),偃師h5重慶小程序開發(fā)公司搭建,偃師網(wǎng)站營(yíng)銷推廣歡迎偃師等地區(qū)企業(yè)咨詢
Geocoding屬于百度地圖WEB服務(wù),用來(lái)在線解析地址,在地址和經(jīng)緯度之間轉(zhuǎn)化。所以你可以分兩步來(lái)實(shí)現(xiàn)。
通過(guò)Geocoding,把起點(diǎn)和終點(diǎn)的地址轉(zhuǎn)化為經(jīng)緯度
用起點(diǎn)終點(diǎn)的經(jīng)緯度,進(jìn)行路徑規(guī)劃
Geocoding?API:
獲取駕駛路線:
輕按
,然后輕按
,接著輸入起始位置和結(jié)束位置,再輕按“路線”?;蛘邚牧斜碇羞x取位置或路線(如果可用)。如果出現(xiàn)多條路線,請(qǐng)輕按要使用的路線。輕按“開始”以開始。
?
聽取建議路線規(guī)劃指示:(iPhone
4S
或新款機(jī)型)輕按“開始”。
“地圖”會(huì)跟隨您的行程,并朗讀出到您目的地的建議路線規(guī)劃提示。若要顯示或隱藏控制,請(qǐng)輕按屏幕。
如果
iPhone
自動(dòng)鎖定,“地圖”仍會(huì)顯示在屏幕上,并繼續(xù)宣讀指示。您還可以打開其他應(yīng)用程序,同時(shí)繼續(xù)獲得建議路線規(guī)劃指示。若要返回到“地圖”,請(qǐng)輕按屏幕頂部的橫幅。
使用建議路線規(guī)劃功能,夜間模式會(huì)自動(dòng)調(diào)整
iPhone
屏幕圖像以更易于在夜間查看。
?
查看建議路線規(guī)劃指示:(iPhone
4)
輕按“開始”,然后向左推送來(lái)查看下一個(gè)指示。
?
查看路線概覽:輕按“概覽”。
?
以列表方式查看路線:輕按。
?
停止建議路線規(guī)劃指示:輕按“結(jié)束”。獲取以當(dāng)前位置為起點(diǎn)的路線:
輕按目的位置橫幅上的
。如果步行,請(qǐng)?jiān)凇霸O(shè)置”“地圖”中設(shè)定“步行”路線的偏好設(shè)置。獲取步行路線:
輕按
,然后輕按
。輸入起始位置和結(jié)束位置,然后輕按“路線”。或者從列表中選取位置或路線(如果可用)。輕按“開始”,然后向左推送來(lái)查看下一個(gè)指示。獲取公交路線:
輕按
,然后輕按
。輸入起始位置和結(jié)束位置,然后輕按“路線”。或者從列表中選取位置或路線(如果可用)。下載并打開想要使用的公交服務(wù)的路線程序。查看交通狀況:
輕按
,然后輕按“顯示交通狀況”。橙色圓點(diǎn)顯示車流減速慢行,紅色圓點(diǎn)顯示車流走走停停。若要查看事故報(bào)告,請(qǐng)輕按標(biāo)記。報(bào)告問(wèn)題。
輕按
,然后輕按“報(bào)告問(wèn)題”。
3D
視圖和
Flyover
視圖
在
iPhone
4S
或新款機(jī)型上,您可以查看三維視圖和鳥瞰世界上許多主要城市。放大直到
或
顯示,然后輕按該按鈕?;蛘哂脙蓚€(gè)手指向上拖移。通過(guò)輕按
并更改視圖,您可以在
3D
視圖和
Flyover
視圖間切換。
調(diào)整相機(jī)角度:
用兩個(gè)手指向上或向下拖移。
“地圖”設(shè)置
前往“設(shè)置”“地圖”。設(shè)置包括:
?
導(dǎo)航語(yǔ)音音量(iPhone
4S
或新款機(jī)型)
?
距離顯示為公里或英里
?
地圖標(biāo)簽始終會(huì)以“設(shè)置”“通用”“多語(yǔ)言環(huán)境”“語(yǔ)言”中指定的語(yǔ)言顯示
?
駕車或步行時(shí)的首選路線
標(biāo)注途經(jīng)點(diǎn)的位置
數(shù)量較少的話可以通過(guò)搜索添加
或者手動(dòng)添加的方式標(biāo)注途經(jīng)點(diǎn)
標(biāo)注點(diǎn)量多的可以通過(guò)上傳數(shù)據(jù)批量標(biāo)注途經(jīng)點(diǎn)
開啟工具的智能路線規(guī)劃功能
點(diǎn)擊路徑功能
選擇起點(diǎn),途經(jīng)點(diǎn),終點(diǎn)。途經(jīng)點(diǎn)多的話點(diǎn)擊+號(hào),添加途經(jīng)點(diǎn)
點(diǎn)擊規(guī)劃路線,平臺(tái)會(huì)通過(guò)智能計(jì)算規(guī)劃出最佳的路線
填寫線路標(biāo)題及描述
打開線路圖層,會(huì)看到線路信息
可通過(guò)樣式設(shè)置編輯成實(shí)際需求的樣式
移動(dòng)app也可進(jìn)行路線規(guī)劃
上次我們說(shuō)到在蘋果開發(fā)者官網(wǎng)查看MapKit文檔,下面直接講解如何加載MapKit的視圖及相關(guān)的屬性。
導(dǎo)入系統(tǒng)文件,創(chuàng)建MKMapView對(duì)象即可,地圖就可以加載了。
列出關(guān)鍵幾點(diǎn):
1. 百度上注冊(cè)開發(fā)者賬號(hào),申請(qǐng)app AK,下載sdk
2. 加入sdk文件到代碼中
3. appDelegate 中注冊(cè):
1)首先 #import"BMapKit.h"
2)didFinishLaunchingWithOptions方法中加入下面代碼
// 要使用百度地圖,請(qǐng)先啟動(dòng)BaiduMapManager
_mapManager = [[BMKMapManageralloc]init];
BOOL ret = [_mapManagerstart:@"mG6DBmXxsgFjc4CMB3ruX7Gr"generalDelegate:self];
if (!ret) {
NSLog(@"baidu map api: ---------- ------manager start failed!");
}
3)applicationWillResignActive方法中加入下面代碼
[BMKMapViewwillBackGround];//百度地圖api
4)applicationDidBecomeActive方法中加入下面代碼
[BMKMapView willBackGround];// 百度地圖api
5)AppDelegate實(shí)現(xiàn)代理 BMKGeneralDelegate
//代理方法
- (void)onGetNetworkState:(int)iError
{
if (0 == iError) {
NSLog(@"baidu map api: ---------- ------聯(lián)網(wǎng)成功");
}
else{
NSLog(@"baidu map api: ---------- ------onGetNetworkState %d",iError);
}
}
//代理方法
- (void)onGetPermissionState:(int)iError
{
if (0 == iError) {
NSLog(@"baidu map api: ---------- ------授權(quán)成功");
}
else {
NSLog(@"baidu map api: ---------- ------onGetPermissionState %d",iError);
}
}
4 Build Settings - Other Linker Flags 去掉 -all_load
這個(gè)是為了解決問(wèn)題: duplicate symbols for architecture armv7
5. 定位代碼
- (void)viewDidLoad {
[superviewDidLoad];
//設(shè)置定位精確度,默認(rèn):kCLLocationAccuracyBest
//[BMKLocationServicesetLocationDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
//指定最小距離更新(米),默認(rèn):kCLDistanceFilterNone
//[BMKLocationServicesetLocationDistanceFilter:100.f];
// 利用百度地圖api定位
//初始化BMKLocationService
_locService = [[BMKLocationServicealloc]init];
_locService.delegate =self;
//啟動(dòng)LocationService
[_locServicestartUserLocationService];
對(duì)應(yīng)代理BMKLocationServiceDelegate
// 代理方法
#pragma mark - BMKLocationServiceDelegate
//實(shí)現(xiàn)相關(guān)delegate處理位置信息更新
//處理方向變更信息
- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation
{
//NSLog(@"heading is %@",userLocation.heading);
}
//處理位置坐標(biāo)更新
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation
{
// NSLog(@"定位經(jīng)緯度: lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude);
//[GlobalsetCurrentPosition:userLocation.location.coordinate];
}
[BMKMapView willBackGround];// 百度地圖api
說(shuō)一下思路:
地圖上那幾個(gè)點(diǎn)的地圖坐標(biāo)應(yīng)該可以拿到吧,天津,北京,上海,這是已知的。
創(chuàng)建一個(gè)UIImageView 將它添加到地圖的上層,用于最終顯示繪制的線路,取名叫routeView.
你可以通過(guò)已知地圖上的坐標(biāo)點(diǎn),使用下面的函數(shù)轉(zhuǎn)換成view上的坐標(biāo)位置
CGPoint point = [mapView convertCoordinate:location.coordinate toPointToView:routeView];
通過(guò)這種方法將其它的地圖坐標(biāo)點(diǎn)都做一下轉(zhuǎn)換。
這時(shí)得到的點(diǎn)就是相對(duì)于當(dāng)前view 的坐標(biāo)點(diǎn)了。
接下來(lái)就可以使用Core graphics framework 中的相關(guān)函數(shù)來(lái)繪制了。
CGContextAddLineToPoint(context,point);
CGContextSetLineWidth=2;
CGContextSetStrokeColorWithColor(context,[UIColor redColor].CGColor);
CGContextStrokePath(context);