关于定位的一些参考

整  理:朱 兵
时  间:2016-02-05
说  明: 定位的相关知识

摘要:关于定位,分为GPS定位和网络定位2种。GPS定位,精度较高,可达到10米,但室内不可用,且超级费电。网络定位,分为wifi定位和基站定位,都是通过获取wifi或者基站信息,然后查询对应的wifi或者基站位置数据库,得到的定位地点。定位数据库可以不断完善不断补充,所以,越定位越准确。

一、常见的定位:

GPS全球定位。

常见的GPS定位的原理可以简单这样理解:由24颗工作卫星组成,使得在全球任何地方、任何时间都可观测到4颗以上的卫星, 测量出已知位置的卫星到用户接收机之间的距离,然后综合多颗卫星的数据就可知道接收机的具体位置。

在露天环境下效果较好,获取位置信息非常精确。适合移动设备。 

缺点:在地铁等位置效果较差

IP地址定位。

适用于接入互联网的设备,通过浏览器是将位置信息发送给 ISP 服务商来解析,其IP 地址与服务商所在位置有关,可能与用户所在位置不同,所以这种方式的解析容易出现偏差。 

另外,由于国内大部分的省都是以省级为单位划分基站对外访问 IP ,也就是说,同样一个出口 IP,后面的对应用户
可能是跨多个城市的。也有一部分省是按照市一级为单位划分的,但是位置偏远。
备注:IP定位很方便,但是数据不准,需要及时更新,有很多商业化的服务。

WiFi定位。

设备只要侦听一下附近都有哪些热点,检测一下每个热点的信号强弱,然后把这些信息发送给网络上的服务端。服务器根据这些信息,查询每个热点在数据库里记录的坐标,然后进行运算,就能知道客户端的具体位置了。一次成功的定位需要两个先决条件:客户端能上网 ,侦听到的热点的坐标在数据库里有。

优点:这种方式与GPS效果同样精确,适用于室内环境的移动设备。

缺点:

  • 你的这个wifi信号,如果在数据库中没有被记录在案,那就没法定位了。比如,如果你买了个新的无线路由器,靠它肯定是没法帮助你的移动设备定位的。
  • 数据更新有延迟,WIFI覆盖并不大,局限
    原理说明:当你的移动设备需要使用wifi定位的时候,它会搜索周围的wifi信号,同时在数据库中搜索,得到地理位置的数据,加上定位提供商收集的海量数据,能够构建出信号的“指纹”,比基站定位更精准。

④基站定位

我们把手机基站的覆盖范围想像成一个个以基站为圆心的圆,需要定位时,手机就向周边多座基站发送测量信号,并计算这些测量信号到达基站所需要的时间,推算出手机距离基站的直线距离,再经过数学运算,手机位置坐标就可由3个基站圆的交点来确定。

优点:LBS定位的优势是方便、成本低,因为它是通过手机进行定位的。理论上说,只要计算三个基站的信号差异,就可以判断出手机所在的位置,而且用户所持终端只需一部手机即可。因此,只要用户手机有信号,就可以随时进行位置定位,而不受天气、高楼、位置等影响。

缺点:定位精度随所处位置基站数不同会有变化。

百度地图等在web开发时并不提供相关api

二、测试结果:

初步得到的结果:GPS>WiFi/基站>IP

1、GPS和WIFI相对测试的结果较好。
2、局限性:WIFI效果较好,但是局限性很大。基站定位在web开发时比较麻烦
3、目前比较好的方式,就是读取GPS的相关信息(比如经纬度等等),再做进一步操作。
4、在精准度要求比较高的情况下,并不推荐使用ip定位。ip定位好处是:并不需要用户授权,方便。

三、业务说明:

以百度地图为例

1、APP开发的话
百度定位sdk,综合了wifi定位、基站定位

2、web开发的话

浏览器定位

浏览器定位插件,封装了标准HTML5定位,并且包含纠偏模块。

html5定位:拿到的是GPS的数据,定位准确

备注:获取经纬度数据,想获得地址,需要纠偏,再使用接口获得。

鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的。

Internet Explorer 9、Firefox、Chrome、Safari 以及 Opera 支持地理定位。

注释:对于拥有 GPS 的设备,比如 iPhone,地理定位更加精确。

更多可参考geekman的文章:http://blog.geekman.vip/archives/446

另外,浏览器定位插件也是混合定位,获取了wifi、基站信息用以定位,对于拥有 GPS 的设备,比如 iPhone,由于获得GPS信息,使得地理定位更加精确。

★浏览器定位,最好使用在手机浏览器上,会更加准确,也更加符合使用场景。PC浏览器上,建议使用IP定位。

通过网络获取IP信息,然后查询IP数据库,获取相应的地址信息。

IP数据库也是可以完善补充,越来越丰富的,所以也是越使用越准确的。

但如果IP有跳转,有篡改等,那么IP定位就会不准确了。

demo:http://developer.baidu.com/map/jsdemo.htm#i8_2

③web接口
嫌开发不方便,可以直接调用web接口,体验更快,缺点是次数限制。
育儿网对一些接口进行了封装(100w次)
根据ip获取地理位置
根据经纬度获取地理位置(百度接口)

具体api地址在:http://api.xinfotek.com/apidoc/doc/

关于JSAPI/webAPI的小小说明

1、js是浏览器端,而web是服务端。

2、在使用上Web更简单,若只想使用服务,直接通过调用接口获取结果的话,并且需求量并不大的 时候,建议使用web。(百度js调用次数不限)

3、想展示地图,或者超过接口限制,比较复杂的web开发,想要的功能并没有提供相应的接口,会需要用到js。

Tip:使用之前需要申请秘钥.

秘钥分为浏览器端,服务端,

为了安全性可设置白名单:
浏览器端是设置域名:如*.ci123.com,只能在该域名下访问

服务端是设置ip白名单,不限制的话 0.0.0.0/0
3、在微信中使用

引用微信js即可使用

给的接口只有两类,一类是用内置浏览器(使用并不多),一类是得到想要的配置

示例一:使用微信内置地图查看位置接口
wx.openLocation({
latitude: 0, // 纬度,浮点数,范围为90 ~ -90
longitude: 0, // 经度,浮点数,范围为180 ~ -180。
name: '', // 位置名
address: '', // 地址详情说明
scale: 1, // 地图缩放级别,整形值,范围从1~28。默认为最大
infoUrl: '' // 在查看位置界面底部显示的超链接,可点击跳转

});
示例二:获取地理位置接口
wx.getLocation({
    type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
    success: function (res) {
        var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
        var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
        var speed = res.speed; // 速度,以米/每秒计
        var accuracy = res.accuracy; // 位置精度
    }
});
 
四、其他说明
①特殊说明:
1、通过百度jsapi测试结果看,通过ip定位城市效果也会存在比较大的误差,更别提精确定位。
但是只要数据库足够丰富,定位结果会准确的多,但是成本会特别高。
2、对于GPS坐标转换成使用百度api需要转换百度坐标(纠偏)
②自己写的参考demo
1、js版(利用html5定位,再调用百度api,调用次数不限)
好处:去除了地图展示等一些功能,直接显示位置。
演示效果
QQ图片20160205154740
2、web请求,这个比较简单,直接根据经纬度调用接口。
好处:少一次调用
③参考资料/网站:
3、百度开发平台:http://lbsyun.baidu.com/

 

 

linux上安装node.js

说明:

使用CentOS系统,进行node.js安装,node.js版本- v0.12.0。

1,先下载node.js:

# wget http://npm.taobao.org/mirrors/node/v0.12.0/node-v0.12.0.tar.gz

//用的淘宝镜像,更快

2,解压文件

# tar xvf node-v0.12.0.tar.gz

 

3,进入解压目录

# cd node-v0.12.0

 

4,检查所需要配置

# ./configure

 

5,如出现以下错误,安装gcc-c++ (安装较新的版本可能会出现)

注意:线上服务器请勿随意升级,建议尝试其他版本的 node.js!!!!!

出现错误提示:

WARNING: C++ compiler too old, need g++ 4.8 or clang++ 3.4 (CXX=g++)

# yum install gcc-c++

如无,请跳过

 

6,进行安装(时间比较长):

# make install

 

7,检查是否成功安装,输入命令:

# node -v

 

如果安装成功会输出相应版本号,如:

v0.12.0

 

8,现在可以创建一个test.js文件进行测试,文件内容为:console.log('Hello World.');

输入命令:

# node test.js

输出:

Hello World.

 

关于include_path使用说明

整    理:朱 兵
时    间:2015-11-30
说    明:关于include_path使用说明
 一、在什么地方遇到?
    现象:在文件中遇到require_once("DB.php"),发现在当前目录下并没有该文件。
    原因:主要是用到了include_path,遇到此问题,在php配置中查找include_path的路径即可找到相应的文件。
    当用到函数include(),require()函数来寻找文件时候.在不设置include_path的情况下,这些函数打开文件时候默认的是以web根目录去寻找.当设置include_path以后,这些php函数就会先在指定的include_path目录下面去搜索寻找。我们可以在include_path目录下找到相应的文件。
 二、include_path的设置
1、第一种方法:
linux 下
修改php.ini文件中的include_path项。

include_path=".:/opt/ci123/php-5.3.27/share/pear"
windows下
include_path=".;c:\php\includes"
在 Windows 中,用分号分隔目录。在任何其它系统中用冒号分隔目录。

编写程序时可以用常量 PATH_SEPARATOR 代替

2、第二个方法:
使用ini_set方法。

ini_set('include_path', '/usr/lib/pear');

 三、运行时包含的顺序

1.如果为绝对路径,则直接包含, 并结束(找不到直接退出).

2.如果是是相对路径((形如./file, ../dir/file),则跳过include_path的作用逻辑, 直接解析相对路径(找不到直接退出)

3.都不是以上两种情况

会根据include_path,和当前执行文件的path组成一个待选的目录列表

注意点:
1、如果在指定的目录下找不到所要求包含的文件,而在当前页面目录下正好存在这个名称的文件时,则默认引入当前目录下的该文件。

2、当指定了多个目录为 include_path ,而所要求包含的文件在这几个目录都有相同名称的文件存在时,php选择使用设定 include_path 时排位居前的目录下的文件。

 四、php手册中的相关函数

   - set_include_path — 设置 include_path 配置选项
   - ini_set() - 为一个配置选项设置值
   - get_include_path() - 获取当前的 include_path 配置选项
   - restore_include_path() - 还原 include_path 配置选项的值
 五、扩展阅读