高德导航地图包下载地图是一款有限地图还是无限地图

5665人阅读
iOS(384)
之前工作在一家智能设备的公司,做过一个亲友定位监控系统,类似现在比较流行的360儿童手环。所以这里简单介绍定位与地图。
1 定位服务
iOS设备提供三种不同定位途径,蜂窝式移动电话基站定位;WiFi定位,通过查询一个WiFi路由器的地理位置信息,比较省电;GPS卫星定位,通过3~4颗卫星定位,最为准确,但是耗电量大。iOS系统如果能够接收GPS信息,那么设备优先采用GPS,其次是WiFi,最后是基站,开发人员不能选择哪种定位方式。
定位服务使用CoreLocation框架,主要使用CLLocationMananger、CLLocationManangerDelegate和CLLocation三个类,CLLocationMananger是定位服务管理类,获取设备的位置信息,CLLocationManangerDelegate是代理协议,CLLocation封装了位置信息。
这里要注意,CLLocationManangerDelegate 的locationManager:didUpdateToLocation:fromLocation:方法得到的坐标是火星坐标,这个原因你懂得,所以需要转换成真实的地理坐标。我使用的是一个第三方的CSqlite类,有一个转换坐标的数据库,你调用就可以转换为正确坐标了。
得到经纬度后,要进行地理位置信息反编码,使用CLGeocoder类实现,将地理坐标转换为地理文字描述信息,这些文字描述信息被封装在CLPlacemark类中。
当然给定地理信息的文字描述,也可以进行地理信息编码查询,转换为地理坐标,也是采用CLGeocoder类。
判断一个坐标点是否在一个无规则的多边形内
在范围内返回1,不在返回0
-(int)mutableBoundConrtolAction:(NSMutableArray *)arrSome:(CLLocationCoordinate2D )myCoordinate4{
int n=arrSome.
float vertx[n];
float verty[n];
for (int i=0; i&arrSome. i++) {
//MyPoint类存储的是经度和纬度
vertx[i]=((MyPoint *)(arrSome[i])).x;
verty[i]=((MyPoint *)(arrSome[i])).y;
if (arrSome.count==0) {
BOOL i=pnpoly(arrSome.count, vertx, verty, myCoordinate4.latitude, myCoordinate4.longitude);
//多边形由边界的坐标点所构成的数组组成,参数格式 该数组的count,
多边形边界点x坐标 的组成的数组,多边形边界点y坐标 的组成的数组,需要判断的点的x坐标,需要判断的点的y坐标
BOOL pnpoly (int nvert, float *vertx, float *verty, float testx, float testy) {
BOOL c=NO;
for (i = 0, j = nvert-1; i & j = i++) {
if ( ( (verty[i]&testy) != (verty[j]&testy) ) &&
(testx & (vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i]) + vertx[i]) )
2 系统地图
地图我目前用过系统、百度以及高德,开发人员使用都是差不多的,下面的代码涉及的类都是高德地图api提供的类。
我之前做项目,使用高德地图,做到后期,项目会出现闪退,后来查出是地图区域内存的问题,然后重新布局了地图区域,使得每一个地图区域能够及时销毁,虽然闪退周期明显延长,但是还是存在,这里不知道是何原因,说来惭愧。
设置地图区域
-(void)SetMapRegion:(CLLocationCoordinate2D)myCoordinate
MACoordinateRegion theRegion = { {0.0, 0.0 }, { 0.0, 0.0 } };
theRegion.center=myC
[self.m_map setScrollEnabled:YES];
theRegion.span.longitudeDelta = 0.01f;
theRegion.span.latitudeDelta = 0.01f;
[self.m_map setRegion:theRegion animated:YES];
平移地图,上下左右
-(void)panMap:(NSString *)direction{
CLLocationCoordinate2D changeCoordinate=self.m_map.centerC
CGPoint changePoint=[self.m_map convertCoordinate:changeCoordinate toPointToView:self.m_map];
if ([direction isEqualToString:@&up&]) {
changePoint.y=changePoint.y+50;
}else if ([direction isEqualToString:@&down&]) {
changePoint.y=changePoint.y-50;
}else if ([direction isEqualToString:@&left&]) {
changePoint.x=changePoint.x-50;
}else if ([direction isEqualToString:@&right&]) {
changePoint.x=changePoint.x+50;
changeCoordinate=[self.m_map convertPoint:changePoint toCoordinateFromView:self.m_map];
[self.m_map setCenterCoordinate:changeCoordinate animated:YES];
判断某一个坐标点是否在当前地图区域内
-(void)isAtCurrentRegion:(CLLocationCoordinate2D)coordiante{
CGPoint point=[self.m_map convertCoordinate:coordiante toPointToView:self.view];
if ((point.x&0)||(point.y&0)||(point.x&WScreen)||(point.y&HScreen)) {
如果不在 设置该点为地图中心点
[self SetMapRegion:coordiante];
在地图上添加标注
系统地图使用MapKit框架,核心是MKMapView类,显示地图只要添加MKMapView实例就可以了。如果要实现在地图上添加标注点,第以是触发添加动作,第二实现MKMapViewDelegate的mapView:viewForAnnotation:完成添加标注。
高德地图实现的原理也是一样的,高德地图使用的是MAMapKit框架。对于annotation,一般会自定义一个继承NSobject并且实现了maannotation协议的类,然后使用mapview的addAnnotation:方法就可以。MKReverseGeocoder类可以实现coordinate的反编码,这里需要实现它的代理,把得到的地理文字描述信息赋给annotation。这里需要实现代理的mapView:viewForAnnotation:方法,一个标注其实就是一个MAAnnotationView,标注有点类似tableviewcell,这里也有重用机制。实现代理的mapView:annotationView:calloutAccessoryControlTapped:方法可以响应leftCalloutAccessoryView或者rightCalloutAccessoryView的点击事件,不过这个accessory
view必须继承自UIControl。
在地图上绘制线条和多边形
MAPolyline类定义一个由多个点相连的多段线,点与点之间尾部想连但第一点与最后一个点不相连, 通常MAPolyline是MAPolylineView的model,它提供了两个方法polylineWithPoints:count:、polylineWithCoordinates:count:用来添加线条,然后再通过map view的addOverlay:方法把Polyline实例添加进去,最后实现mapviewdelegate的mapView:viewForOverlay:方法就可以了。注意如果一开始添加的不是coordinate,而是point,可以通过map
view的convertPoint:toCoordinateFromView:方法进行转换。
MAPolygon类定义的就是一个不规则的由多个点组成的闭合多边形,点与点之间按顺序尾部相连, 第一个点与最后一个点相连, 通常MAPolygon是MAPolygonView的model,首先需要添加坐标点的数组,可以使用polygonWithCoordinates:count:方法或者polygonWithPoints:count:方法,然后把这个polygon通过addOverlay:方法添加到map view上就可以了。然后可以在mapviewdelegate里面的mapView:viewForOverlay:方法里面给MAPolygonView的属性赋值,这样一个完整的多边形就出来了。
不管是高德地图还是百度地图等第三方,都会有一个mapsearchkit,这是一个用于查询的框架,有兴趣的朋友可以多加研究。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1331535次
积分:13819
积分:13819
排名:第936名
原创:19篇
转载:1213篇
评论:62条
(35)(159)(31)(55)(22)(18)(26)(25)(4)(11)(17)(9)(25)(13)(34)(9)(2)(6)(12)(4)(20)(25)(36)(24)(18)(9)(6)(13)(3)(12)(4)(11)(3)(1)(4)(3)(4)(9)(5)(5)(20)(5)(5)(14)(10)(45)(81)(117)(7)(3)(23)(20)(105)(45)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'当前位置:
高德、百度地图全方位对比评测:哪个是出行的最佳选择!
来源:网络
  假期期间,北上广等城市上演了空城一幕,丝毫感觉不到交通与人流的拥挤,道路变得很顺畅。假期过后,大家纷纷重返城市,开始忙绿的工作与生活,随之而来的交通问题也随之回归。面对这些问题,拥有一款得心应手的交通、软件变得十分重要。小编为此带来目前热门的两款地图应用,高德、全方位对比评测,看看哪个是出行的最佳选择!  高德地图和百度地图都先后推出了公交查询功能,该功能的推出极大地方便了用户乘坐公交出行,改变了用户传统的出行方式,不必再查站牌、问路人。拿出,只需输入出发地、目的地就能方便地查询线路,得到详细的乘车指导。  为了让大家能够更加清楚高德地图和百度地图在公交功能上的特点,我们本次特别从一个公交通勤的上班族的视角,为大家奉上这两款在公交出行方面的实际应用体验。我们将从应用体验、线路规划、公交实时查询三个方面对两款产品进行对比。  此外,为了保证测试的公平性,我们使用了同一部iPhone手机并在同样的网络环境下进行对比。测试的APP为V9.0.5百度地图和V7.6.0.2014版高德地图。  操作体验比拼 高德地图相对快捷、明了  我们首先对比的是使用两款产品的公交功能,在使用流程上,这两款产品有何差异。百度地图和高德地图都在搜索条内提示了查公交功能,输入目的地搜索,即可开始使用。  高德地图进入公交查询页流程  高德地图在搜索框输入目的地后,显示为目的地选择页,用户需要点击底部的“去这里”到达目的地搜索页,在顶部选择切换至公交后,点击“坐公交”即可开始公交查询。操作相对快捷、明了!  百度地图进入公交查询页流程  百度地图在搜索框输入目的地后,显示为目的地选择页,用户可以点击右下蓝色的“到这去”跳转到出发页,选择公交选项,使用公交功能,点击搜索后即可打开公交查询页面。如果用户上一次使用了公交功能,百度地图可以自动记忆下次直接打开公交查询页面,省去了公交搜索一步。  从进入公交查询的流程的来看,两款产品差异不大,百度地图为3步开启,高德地图同样也是3步。百度地图点击“到这去”后可分流到多个功能,譬如:专车、驾车、公交、骑行等;高德地图位于界面下方“去这里”按钮,直接跳转到公交界面直接开始操作与查询。相比之下,高德地图的操作流程相对清晰,直观,快捷。  高德地图和百度地图公交站入口对比  高德地图和百度地图两款产品都有公交站查询,并且位置都位于目的地搜索界面下,公交站功能可以使用户通过定位显示附近的公交站,并能够显示本站公交,以及经过该站的公交车详细线路信息。通过公交站功能,用户还能够开启导航模式,指导用户步行到指定公交站。  高德地图和百度地图公交站搜索对比  我们详细对比了中关村地区的公交站功能,从实际对比来看,两款产品在内容显示上略微存在差异,但在功能应用上,并没有太多差异。两款APP的公交信息查询结果都很明确,并且都具备步行导航功能。相比之下,高德地图比百度地图多显示了票价信息和首末车时间等信息,让用户能更直观地了解到相关信息。  百度地图公交站详细显示和高德地图公交图层  此外,高德地图在图层界面中,具备公交地图的切换,打开图层后能够在地图上直接显示公交站,该功能使用便捷,设计贴心。百度地图虽然没有该图层切换功能,依然可以在地图上查找到公交站图标,并能够快速显示公交信息,相比高德地图需要点击详细页显示,略胜一筹。  线路规划比拼 高德信息详尽、百度线路直观  前文我们对比了进入公交功能,下面将比较两款产品的公交使用界面。两款产品都具有“现在出发”和“推荐线路”两个筛选项,并且两个功能的使用体验相同,在此就不在过多介绍。接下来,我们设置同一个目的地,并且筛选不坐地铁,以比较两款产品的公交查询功能。  高德地图公交线路查询  高德地图的公交线路查询内容显示丰富,提供了换乘提示,预计达到时间、公里数、步行距离、票价,并给出了规划建议路况和上车车站,以及所乘坐的公交车预计到达时间。此外高德地图还可以详细的在地图上显示规划的公交线路和换乘地点,并提供了其他线路的切换功能和下车提醒功能。  百度地图公交线路查询  百度地图的公交线路查询,拥有换乘提示、预计到达时间、总站数、步行距离、票价,同样给出了线路建议,以及所乘坐的公交车预计到达时间。百度地图能够详细的在地图上显示公交规划线路、换乘地点,并且拥有到站提醒功能。  从公交查询的丰富性方面,高德地图的公交信息显示功能更为丰富,给用户的指导更详细。  有关公交线路规划方面,两款产品都有不同的算法,以我们从中关村去往国贸为例,百度地图给出的乘车指南302路/614路/549路换乘特8内最快,线路从中关村南出发走三环至亮马桥换乘到国贸。高德地图给出的乘车指南为302路换乘特8内最为畅通,线路从中关村南上车,行使三环到三元桥换成特8内到国贸。  两款产品的公交规划线路测试整体表现上基本一直,在一些细节方面略有差异,高德地图给出公交线路规划包含了多个公交选择,在拥堵忙碌的城市交通,给用户推荐最为通畅的交通路线十分贴心。  从线路规划而言,实际的路况、司机的驾驶习惯、以及换乘的等候时间都是存在变量的,所以我们并不能给出哪款产品的公交线路规划结果更为优化。在这方面还需要用户结合地图软件,以及自己的使用经验进行乘车选择。  前面的两项测试,即是我们使用手机地图软件的整个流程,对于用户来说,极大的方便了出行,尤其在陌生的城市,仅需几步操作就能够到达想去的任何地方。接下来我们将比较两款产品的实时公交查询功能,该功能是用户等公交的利器,当然并不是全国开放,所以我们放在最后来对比。  实时公交查询比拼 两者准确度相近  实时公交查询功能两款产品的入口都位于公交目的地搜索界面下,点击即可进入到实时公交的主界面。实时公交具备两个大的功能,公交线路实时查询和公交站即将到站的公交查询,两个功能从不同方向方便用户使用。  高德地图和百度地图实时公交对比  百度地图实时公交查询“我的订阅”中,可查询某路车的运行状态,高德地图该功能位于“我的关注”中。百度地图通过地图显示方式展现公交车的运行状态,并且具有往返显示功能,并且具备公交车靠站状态。高德地图具有公交车靠站状态。  高德地图和百度地图实时公交到站对比  百度地图的附近实时公交针对站点状态显示紧凑,用户查看站点状态一目了然。高德地图附近公交显示全面,用户滑动到特点站点即可查询公交的到站情况。两种方式不相伯仲,操作上基本一致。  我们实际测试中,两款产品都存在数据不全的现象,并没有覆盖所有公交线路,由于该数据为实时数据,并且两款产品都是从公交系统获得数据,所以在此功能上我们不再做过多苛求,希望能够在以后的中逐渐加入更多的公交线路实时查询。我们在实际使用上,两款产品的公交线路实时数据准确性较高,公交车到站时间与实际显示误差很小,能够给用户很好的乘车指导。  总结点评  以上我们通过三个方面对高德地图和百度地图的公交功能进行了全方位对比,从整个测试来看,两款产品的功能设计全面,基本囊括了用户公交出行的方方面面。并且功能完善度以及功能布局上基本一致,只是在细节方面存在些许差异。大家可以根据两款产品的特点,结合自身的需求,来进行公交出行时的选择。高德地图百度地图
你可能还对一下内容感兴趣
【上一篇】
【下一篇】
推荐阅读:
看完这篇文章有何感觉?
苹果应用推荐
PP助手准备为您下载应用
未越狱版:鳄鱼小顽皮爱洗澡
如果在10秒后下载任务还没有开始,请下载并安装:
下载步骤如下:12345678910
09-1308-0908-0908-0708-0708-0408-0308-0308-0208-01
京公网安备 92 京ICP证140355号 京网文【-109号
未成年人家长监护

我要回帖

更多关于 高德地图高德导航区别 的文章

 

随机推荐