ArcGIS Runtime SDK for iOS开发之-显示你的位置

在地图上显示你的位置

许多iOS设备如iPod touch、iPad和iPhone提供了设备的位置信息。我们知道iOS包含了一个大家都很熟悉的CoreLocation框架,该框架为我们提供了位置获取的功能,无论是通过Wi-Fi、蜂窝网络还是GPS。这个框架同时也为开发人员提供了API,使得他们能够将定位功能集成到他们的应用程序中去。

AGSmapView组件提供了一个简单的方法来显示和追踪设备的位置信息。与地图相关联的AGSlocationDisplay对象提供了CoreLocation框架的门户,从而使得利用位置服务进行工作变得更加容易。

开启显示位置功能

对于早期的操作系统如iOS7或是早期版本,在地图上展示设备的位置信息的话,在地图已经完成加载后,只用调用AGSLocationDisplay对象的startDataSource方法即可。

-(void) mapViewDidLoad:(AGSMapView*)mapView { [self.mapView.locationDisplay startDataSource];} 从iOS8之后,apps必须明确的请求授权来访问设备的位置服务。这里有两种授权方式可用:whenInuse 和Always取决于app是否只想在前景访问位置,或是前景和背景都想访问。在默认情况下,地图请求WhenInUse授权。你需要在你app的info.plist文件中添加NSLocationWhenInUseUsageDescription关键字以及对应的值。

在缺省情况下,地图使用蓝色、圆形符号来展示你的设备位置。地图总是试图获取最准确的位置,但是这取决与信号的强度、卫星的位置和其它因素,而且地图报告的位置可能只是真实位置的近似。地图通常会用一个围绕位置的圆圈来指示定位的精度范围。

位置数据源

AGSLocationDisplay 仅仅管理地图上位置信息的显示,它并不主动去检索任何位置信息。相反,它依赖位置的数据源来提供频繁的位置更新。你可以使用它提供的任何数据源,或者你可以插入你自己的数据源来满足地图的位置更新。

AGSLocationDisplay在没有任何提供的情况下,默认为AGSCLLocationManangerLocationDisplayDataSource。

AGSCLLocationManangerLocationDisplayDataSource

该数据源使用iOS的CoreLocation框架,通过GPS、WiFi 或是蜂窝网络来获取位置的更新。它会试图尽可能频繁的获取更精确的信息。

AGSSimulatedLocationDisplayDataSource

该数据源可以使你基于任何线状几何体来模拟位置更新。线中的每个顶点被用来发射位置更新。

//The polyline geometry along which location updates should be simulatedAGSPolyline* route = …;//Create the data source. Assign the geometry.AGSSimulatedLocationDisplayDataSource* simulatedDS = [[AGSSimulatedLocationDisplayDataSource alloc] init];[simulatedDS setLocationsFromPolyline:route];//Set data source self.mapView.locationDisplay.dataSource = simulatedDS;

AGSGPXLocationDataSource

该数据源使用GPS文件中的第一条踪迹或是道路来模拟位置更新。

//Create the data source using a GPX file on the webNSURL* url = [NSURL URLWithString:@""];AGSGPXLocationDataSource* gpxDS = [[AGSGPXLocationDataSource alloc] initWithURL:url];//Or, create the data source using a GPX file on the deviceNSString* pathToGPXOnDevice = …;AGSGPXLocationDataSource* gpxDS = [[AGSGPXLocationDataSource alloc] initWithPath:pathToGPXOnDevice];//Set data source self.mapView.locationDisplay.dataSource = gpxDS; 自动扫描模式

地图在接收到位置更新时,提供了一些预设来定义地图的行为。

关闭模式

在这种模式下,地图仅更新在地图上的位置符号的位置,它并不重新进行中心定位。因此,位置符号可能在相应位置更新时移出屏幕。

缺省模式

在这种模式下,当定位符号移动到一个“漫游程度”时,地图会试图通过重新中心化位置符号来尽量保持其在屏幕上。因此,定位符号可能在漫游范围内自由移动。但是只要定位符号退出漫游模式,地图就会重新使其中心化。

默认情况下,漫游范围通常是地图可视范围的一半大小,但是你也可以通过修改AGSLocationDisplay中的wanderExtentFactor属性来自定义漫游范围。如果值为1,意味着漫游范围等于地图的可视范围,并且定位符号可能在地图重新中心化之前移动到地图边缘。如果值为0,则意味着无止境的漫游范围,而地图也会在任何一个位置更新处进行中心化。

self.mapView.locationDisplay.autoPanMode = AGSLocationDisplayAutoPanModeDefault ;self.mapView.locationDisplay.wanderExtentFactor = 0.75; //75% of the map's viewable extent 导航模式

这种模式最适合于车载导航。在这种模式下,定位符号被固定在屏幕的一个点,并且总是指向设备的顶端边缘方向。地图根据位置更新来移动和旋转,并且指向设备的移动行驶的方向。因此,虽然定位符号看起来像是静止的,但是在它下面的地图却是在移动和旋转着。

定位符号的位置可以通过改变AGSLocationDisplay中的navigationPointHeightFactor属性来进行调整。如果其值为0,意味着定位符号应被放在地图的底部边缘,如果值为1则放在顶部边缘。而如果是0和1之间的值,定位符号就会处于从底部边缘到顶部边缘中心线的某个位置。

self.mapView.locationDisplay.autoPanMode = AGSLocationDisplayAutoPanModeNavigation ;self.mapView.locationDisplay.navigationPointHeightFactor = 0.25; //25% along the center line from the bottom edge to the top edge 罗盘导航模式梦想,并不奢侈,只要勇敢地迈出第一步。

ArcGIS Runtime SDK for iOS开发之-显示你的位置

相关文章:

你感兴趣的文章:

标签云: