我也遇到过同样的问题,后来是用Geocoding解决的
创新互联公司主营偃师网站建设的网络公司,主营网站建设方案,重庆APP开发,偃师h5重庆小程序开发公司搭建,偃师网站营销推广欢迎偃师等地区企业咨询
Geocoding属于百度地图WEB服务,用来在线解析地址,在地址和经纬度之间转化。所以你可以分两步来实现。
通过Geocoding,把起点和终点的地址转化为经纬度
用起点终点的经纬度,进行路径规划
Geocoding API:
获取驾驶路线:
轻按
,然后轻按
,接着输入起始位置和结束位置,再轻按“路线”。或者从列表中选取位置或路线(如果可用)。如果出现多条路线,请轻按要使用的路线。轻按“开始”以开始。
•
听取建议路线规划指示:(iPhone
4S
或新款机型)轻按“开始”。
“地图”会跟随您的行程,并朗读出到您目的地的建议路线规划提示。若要显示或隐藏控制,请轻按屏幕。
如果
iPhone
自动锁定,“地图”仍会显示在屏幕上,并继续宣读指示。您还可以打开其他应用程序,同时继续获得建议路线规划指示。若要返回到“地图”,请轻按屏幕顶部的横幅。
使用建议路线规划功能,夜间模式会自动调整
iPhone
屏幕图像以更易于在夜间查看。
•
查看建议路线规划指示:(iPhone
4)
轻按“开始”,然后向左推送来查看下一个指示。
•
查看路线概览:轻按“概览”。
•
以列表方式查看路线:轻按。
•
停止建议路线规划指示:轻按“结束”。获取以当前位置为起点的路线:
轻按目的位置横幅上的
。如果步行,请在“设置”“地图”中设定“步行”路线的偏好设置。获取步行路线:
轻按
,然后轻按
。输入起始位置和结束位置,然后轻按“路线”。或者从列表中选取位置或路线(如果可用)。轻按“开始”,然后向左推送来查看下一个指示。获取公交路线:
轻按
,然后轻按
。输入起始位置和结束位置,然后轻按“路线”。或者从列表中选取位置或路线(如果可用)。下载并打开想要使用的公交服务的路线程序。查看交通状况:
轻按
,然后轻按“显示交通状况”。橙色圆点显示车流减速慢行,红色圆点显示车流走走停停。若要查看事故报告,请轻按标记。报告问题。
轻按
,然后轻按“报告问题”。
3D
视图和
Flyover
视图
在
iPhone
4S
或新款机型上,您可以查看三维视图和鸟瞰世界上许多主要城市。放大直到
或
显示,然后轻按该按钮。或者用两个手指向上拖移。通过轻按
并更改视图,您可以在
3D
视图和
Flyover
视图间切换。
调整相机角度:
用两个手指向上或向下拖移。
“地图”设置
前往“设置”“地图”。设置包括:
•
导航语音音量(iPhone
4S
或新款机型)
•
距离显示为公里或英里
•
地图标签始终会以“设置”“通用”“多语言环境”“语言”中指定的语言显示
•
驾车或步行时的首选路线
标注途经点的位置
数量较少的话可以通过搜索添加
或者手动添加的方式标注途经点
标注点量多的可以通过上传数据批量标注途经点
开启工具的智能路线规划功能
点击路径功能
选择起点,途经点,终点。途经点多的话点击+号,添加途经点
点击规划路线,平台会通过智能计算规划出最佳的路线
填写线路标题及描述
打开线路图层,会看到线路信息
可通过样式设置编辑成实际需求的样式
移动app也可进行路线规划
上次我们说到在苹果开发者官网查看MapKit文档,下面直接讲解如何加载MapKit的视图及相关的属性。
导入系统文件,创建MKMapView对象即可,地图就可以加载了。
列出关键几点:
1. 百度上注册开发者账号,申请app AK,下载sdk
2. 加入sdk文件到代码中
3. appDelegate 中注册:
1)首先 #import"BMapKit.h"
2)didFinishLaunchingWithOptions方法中加入下面代码
// 要使用百度地图,请先启动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实现代理 BMKGeneralDelegate
//代理方法
- (void)onGetNetworkState:(int)iError
{
if (0 == iError) {
NSLog(@"baidu map api: ---------- ------联网成功");
}
else{
NSLog(@"baidu map api: ---------- ------onGetNetworkState %d",iError);
}
}
//代理方法
- (void)onGetPermissionState:(int)iError
{
if (0 == iError) {
NSLog(@"baidu map api: ---------- ------授权成功");
}
else {
NSLog(@"baidu map api: ---------- ------onGetPermissionState %d",iError);
}
}
4 Build Settings - Other Linker Flags 去掉 -all_load
这个是为了解决问题: duplicate symbols for architecture armv7
5. 定位代码
- (void)viewDidLoad {
[superviewDidLoad];
//设置定位精确度,默认:kCLLocationAccuracyBest
//[BMKLocationServicesetLocationDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
//指定最小距离更新(米),默认:kCLDistanceFilterNone
//[BMKLocationServicesetLocationDistanceFilter:100.f];
// 利用百度地图api定位
//初始化BMKLocationService
_locService = [[BMKLocationServicealloc]init];
_locService.delegate =self;
//启动LocationService
[_locServicestartUserLocationService];
对应代理BMKLocationServiceDelegate
// 代理方法
#pragma mark - BMKLocationServiceDelegate
//实现相关delegate处理位置信息更新
//处理方向变更信息
- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation
{
//NSLog(@"heading is %@",userLocation.heading);
}
//处理位置坐标更新
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation
{
// NSLog(@"定位经纬度: lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude);
//[GlobalsetCurrentPosition:userLocation.location.coordinate];
}
[BMKMapView willBackGround];// 百度地图api
说一下思路:
地图上那几个点的地图坐标应该可以拿到吧,天津,北京,上海,这是已知的。
创建一个UIImageView 将它添加到地图的上层,用于最终显示绘制的线路,取名叫routeView.
你可以通过已知地图上的坐标点,使用下面的函数转换成view上的坐标位置
CGPoint point = [mapView convertCoordinate:location.coordinate toPointToView:routeView];
通过这种方法将其它的地图坐标点都做一下转换。
这时得到的点就是相对于当前view 的坐标点了。
接下来就可以使用Core graphics framework 中的相关函数来绘制了。
CGContextAddLineToPoint(context,point);
CGContextSetLineWidth=2;
CGContextSetStrokeColorWithColor(context,[UIColor redColor].CGColor);
CGContextStrokePath(context);