定位

来源:互联网 发布:凯文加内特捏脸数据 编辑:程序博客网 时间:2024/06/10 08:40

1.iPhone的定位技术依赖于几家提供商:Skyhook wireless,Google Map,美国国防部全球定位系统。

2.GPS参考通信技术-GPS

3.Wifi定位,不一定要通过wifi上网,但手机的wifi服务和位置服务一定要打开。

        关于wifi热点:wifi热点越来越多,并且一般都是很少变位置的,比较固定,在城市中一个地点可能会收到多个AP信号。热点通电后都会向周围发射信号,不论是否加密,信号中包含此热点的唯一全球ID。即使距离此热点比较远,无法建立连接,仍可以侦听到它的存在。

       定位端侦听附近都有哪些热点,检测每个热点的信号强弱,把这些信息发送给Skyhook的服务器。服务器根据这些信息,查询每个热点在数据库里记录的坐标,运算后把坐标告诉客户端。收到的AP信号越多定位就越准。
       所以这需要:

(1)客户端打开wifi服务,收集附近的wifi信号

(2)手机能上网,当wifi不能上网时手机会自动尝试edge,需要连上Skyhook的服务器。
(3)侦听到的热点的坐标在Skyhook的数据库里有记录

        怎么知道每个AP的坐标信息?

一种说法是靠网友自己搜集,然后发给Skyhook,Skyhook会付钱。

官方网站上的说法是开着车满大街转悠,边走边采集AP信号,并用GPS定位,就有了坐标信息。而且他们会定期重新开车采集数据,以适应热点的变化。这更靠谱,而且成本并不高。比方说采集北京,设备上一个带GPS和wifi的PDA足以,然后装到出租车上,每月给司机200、300的,让他就正常拉客人。只要有3、5个司机合作,数据就采集下来了,并不断地更新。司机也一定会很乐呵,这纯粹是无成本的额外收入呀,还能享受一下GPS。 有一个此服务已经覆盖的区域的图:http://www.skyhookwireless.com/howitworks/coverage.php

        缺点和优势:

        wifi定位精度比GPS低,受服务范围限制(野外别指望能用上),且没有方向、速度等数据,不能导航,更不能离线使用。不过它有比GPS更优越的地方,在人口、楼群密集的地方,使用的效果会更好。GPS启动时间长,在室内是无效的,天气不好的时候表现也欠佳,楼群太密集的地方也不太好用。而这些因素都被wifi定位克服了。

         参考http://iphonebbs.cnmo.com/thread-56836-1-1.html

 

         用未装电话卡的手机实地测试在繁华的工作地点室内测试定位很快,而在居住的郊区室内定位失败,室外定位成功。这应该就是因为工作繁华地段室内可以利用wifi定位,郊区无wifi位置记录,只能gps定位。

 

4.iPhone3GS最先使用了磁力计,定位功能关闭后,磁向更新仍然可用。它不会泄漏用户隐私,不会提示用户授予使用方向数据的权限。

   测试newHeading.magneticHeading从正上方开始逆时针方向从0到360递增.

5.逆向地理编码:Reverse Geocoding,将经纬度转换为容易识别的信息。

   只需要分配一个MKReverseGeocoder实例,并提供坐标值。

   MKReverseGeocoder *geocoder = [[MKReverseGeocoder alloc] initWithCoordinate:newLocation.coordinate];
    geocoder.delegate = self;
    [geocoder start];

6.

 ArcGIS API for iOS开发教程(八)地图定位

http://blog.csdn.net/barry114/archive/2011/04/08/6308673.aspx

Apple系列的移动设备定位位置有两种方式,一是使用ArcGIS API for iOS中MapView中的GPS对象来获取当前位置;二是通过iPhone SDK中的CLLocationManager来获取。前者在获取当前位置的时候会受到设备的限制,如iPod Touch、iPad wifi版都是没有GPS模块的,因此,在使用mapView中的GPS对象时会失效,无法进行定位;后者在获取定位信息的时候,移动设备会首先使用 GPS,如果GPS无效则使用wifi或者蜂窝网络进行定位,,这样,即便iPod Touch、iPad wifi版在联网情况下同样可以进行定位。

 

iPhone分阶段处理定位,它根据请求的精确度使用不同的方法:GPS定位,WIFI定位,蜂窝基站定位,还可能采用因特网提供商定位。

http://www.yifeiyang.net/iphone-developer-advanced-10-use-gps/

// 如果GPS测量成功以下的函数被调用
- (void)locationManager:(CLLocationManager *)manager
  didUpdateToLocation:(CLLocation *)newLocation
      fromLocation:(CLLocation *)oldLocation{

  // 取得经纬度
  CLLocationCoordinate2D coordinate = newLocation.coordinate;
  CLLocationDegrees latitude = coordinate.latitude;//纬度
  CLLocationDegrees longitude = coordinate.longitude;//经度
  // 取得精度
  CLLocationAccuracy horizontal = newLocation.horizontalAccuracy;
  CLLocationAccuracy vertical = newLocation.verticalAccuracy;
  // 取得高度
  CLLocationDistance altitude = newLocation.altitude;
  // 取得时刻
  NSDate *timestamp = [newLocation timestamp];

  // 以下面的格式输出 format: <latitude>, <longitude>> +/- <accuracy>m @ <date-time>
  NSLog([newLocation description]);

  // 与上次测量地点的间隔距离
  if(oldLocation != nil){
    CLLocationDistance d = [newLocation getDistanceFrom:oldLocation];
    NSLog([NSString stringWithFormat:@"%f", d]);

}

 

百度拾取坐标系统

http://openapi.baidu.com/map/pick/index.html

 

http://ditu.google.cn/maps?client=aff-360daohang&hl=zh-CN&tab=wl 点右上角的新,启用经纬度工具提示,


7.调用MKLocationManager私有API,解决中国区地址偏移

http://blog.cnrainbird.com/index.php/2012/03/31/diao_yong_mklocationmanager_si_you_api_jie_jue_zhong_guo_qu_di_zhi_pian_yi/

原创粉丝点击