最近在作一个搜索附近3千米全部超市信息(已经录入数据库的超市信息)的功能。思路很简单只是获取用户当前地理位置(经纬度),经过sql语句筛选出3千米范围内的全部超市信息,而后传递到前台页面展现出来。可是我是第一次经过移动端web获取用户地理位置,遇到不少的问题,我以为我有必要记录一下,一方面彰显本身的成就,一方面想把经验分享给你们。
移动web端获取用户地理位置很麻烦,由于涉及用户隐私,因此web获取用户地理位置的方式不多并且精确度很低。我刚知道要作定位的功能,第一时间去看了百度地图API,找到了web浏览器定位,说是浏览器定位其实也是经过用户IP定位,我很快就完成这个所谓的搜索功能,以为这真是太简单了。可是事实并非如此,我最开始测试的时候是用WiFi测试的,测试的结果发现精确度有点低,并且安卓端和ios端数据显示还不同,根据咱们的测试报告上说应该是ios更精准一些,这些还不算什么,由于咱们只是搜索三千米范围内的数据有些偏差也能够,可是一个致命的问题让我不得不放弃了百度地图。
这个致命问题就是,只要链接移动数据(不使用WiFi)所有都定位到合肥去了(测试使用的是安徽手机号),我百思不得其解,通过一番测试思考才明白所谓的ip定位是什么意思,也明白了所谓移动数据是什么?所谓的ip定位就是经过路由地址定位,移动网络就是一个大的WiFi网络环境,使用移动数据定位会定位到这个WiFi网络的路由所在地,也就是合肥。这一结果让我心凉,移动网络不能定位这让咱们的需求也成了泡影,我不得不放弃已经完成的功能另外找寻找解决方案。
经过不停的搜索、寻找资料、询问前辈,我找到了第二种解决方案——html5定位,这个比以前调用百度地图的API简单多了,我很快又一次完成了这个功能。html5定位不管是链接WiFi仍是移动网络都能定位到用户所在位置,可是一样也出现一个问题,使用WiFi比使用移动网络精准,可是这不影响咱们的功能需求,算是符合咱们的要求,但测试人员并不打算放过我,最新的测试报告上说IOS端会弹出这么一段话Origin does not have permission to use Geolocation service,翻译过来就是请求源没有权限使用地理定位服务,我一脸懵逼。找了不少资料才明白,苹果公司认为http请求都是不安全的因此拒绝为http请求提供地理定位服务,而咱们公司使用的就是http请求。
我这时候有点绝望了,疯狂的找解决方案,最后还真让我找到了——腾讯地图。我一直以为腾讯很坑爹,网页游戏都被人骂,可是此次不得不感谢它。腾讯地图也是使用html5定位技术但人家是https请求,因此腾讯抓住了这个机会,创建一个相似中转站的请求转发(我我的的理解)。咱们的请求会到腾讯的中转站(https)而后在(https)返回给咱们这样咱们的请求就是https请求IOS用户端就会为咱们的定位提供地理位置定位服务了,此次测试终于过了。
虽然过程很曲折可是结果还算不错,总算知足了定位的功能需求,也收获了不少东西。