使用JS获取当前地理位置方法汇总


Posted in Javascript onDecember 18, 2014

今年的项目开发中,初步接触了移动端WEB开发,也就边学习HTML5边开发,主要使用了JQuery Mobile技术,发现这个不适合做互联网产品,大部分样式都需要重写,只用了部分功能。手机端WEB开发过程中第一次接触了定位功能,通过各大搜索引擎发现手机端定位都是通过浏览器的定位,而用在PC端浏览器第一次会弹出提示“是否开启定位功能”,Boss看到这个提示,却觉得对用户的体验效果不好,不好那我换一种方式实现不就好了,这又不是多大的事,而Boss的脸色就大变,就说:不应该有这样的体验。我们这样做不都是为了赶时间,能够尽快将新功能发布嘛。

1.手机WEB定位方法:

var getLocation = function (successFunc, errorFunc) { //successFunc获取定位成功回调函数,errorFunc获取定位失败回调

    //首先设置默认城市

    var defCity = {

        id: '000001',

        name: '北京市',

        date: curDateTime()//获取当前时间方法

    };

    //默认城市

    $.cookie('VPIAO_MOBILE_DEFAULTCITY', JSON.stringify(defCity), { expires: 1, path: '/' });

    if (navigator.geolocation) {

        navigator.geolocation.getCurrentPosition(function (position) {

            var lat = position.coords.latitude;

            var lon = position.coords.longitude;

            //var map = new BMap.Map("container");   // 创建Map实例

            var point = new BMap.Point(lon, lat); // 创建点坐标

            var gc = new BMap.Geocoder();

            gc.getLocation(point, function (rs) {

                var addComp = rs.addressComponents;

                var curCity = {

                    id: '',

                    name: addComp.province,

                    date: curDateTime()

                };

                //当前定位城市

                $.cookie('VPIAO_MOBILE_CURRENTCITY', JSON.stringify(curCity), { expires: 7, path: '/' });

                //alert(addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street);

                if (successFunc != undefined)

                    successFunc(addComp);

            });

        },

        function (error) {

            switch (error.code) {

                case 1:

                    alert("位置服务被拒绝。");

                    break;

                case 2:

                    alert("暂时获取不到位置信息。");

                    break;

                case 3:

                    alert("获取位置信息超时。");

                    break;

                default:

                    alert("未知错误。");

                    break;

            }

            var curCity = {

                id: '000001',

                name: '北京市',

                date: curDateTime()

            };

            //默认城市

            $.cookie('VPIAO_MOBILE_DEFAULTCITY', JSON.stringify(curCity), { expires: 1, path: '/' });

            if (errorFunc != undefined)

                errorFunc(error);

        }, { timeout: 5000, enableHighAccuracy: true });

    } else {

        alert("你的浏览器不支持获取地理位置信息。");

        if (errorFunc != undefined)

            errorFunc("你的浏览器不支持获取地理位置信息。");

    }

};

var showPosition = function (position) {

    var lat = position.coords.latitude;

    var lon = position.coords.longitude;

    //var map = new BMap.Map("container");   // 创建Map实例

    var point = new BMap.Point(lon, lat); // 创建点坐标

    var gc = new BMap.Geocoder();

    gc.getLocation(point, function (rs) {

        var addComp = rs.addressComponents;

        var curCity = {

            id: '',

            name: addComp.province,

            date: curDateTime()

        };

        //当前定位城市

        $.cookie('VPIAO_MOBILE_CURRENTCITY', JSON.stringify(curCity), { expires: 7, path: '/' });

        //alert(addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street);

    });

};

var showPositionError = function (error) {

    switch (error.code) {

        case 1:

            alert("位置服务被拒绝。");

            break;

        case 2:

            alert("暂时获取不到位置信息。");

            break;

        case 3:

            alert("获取位置信息超时。");

            break;

        default:

            alert("未知错误。");

            break;

    }

    var curCity = {

        id: '000001',

        name: '北京市',

        date: curDateTime()

    };

    //默认城市

    $.cookie('VPIAO_MOBILE_DEFAULTCITY', JSON.stringify(curCity), { expires: 1, path: '/' });

};

前提要引入百度API:<script src="http://api.map.baidu.com/api?v=1.4" type="text/javascript"></script>

2.PC端通过IP实现方法:

采用腾讯提供的接口,这个目前已经不能使用了

<script type="text/javascript" src="http://fw.qq.com/ipaddress"></script>

<script type="text/javascript">

    document.write(IPData[0]);    //显示IP地址

    document.write(IPData[2]);    //显示省

    document.write(IPData[3]);    //显示市

</script>

采用新浪接口: http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js

多地域测试方法:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=127.0.0.1

<script type="text/javascript">

        $.getScript('http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js', function(_result) {

            if (remote_ip_info.ret == '1') {

                alert('国家:' + remote_ip_info.country + '<BR>省:' + remote_ip_info.province + '<BR>市:' + remote_ip_info.city + '<BR>区:' + remote_ip_info.district + '<BR>ISP:' + remote_ip_info.isp + '<BR>类型:' + remote_ip_info.type + '<BR>其他:' + remote_ip_info.desc);

            } else {

                alert('没有找到匹配的IP地址信息!');

            }

        });

</script>

网易有道IP地址接口(这个有待测试)

http://www.youdao.com/smartresult-xml/search.s?type=ip&q=IP地址

     淘宝请求接口(GET)

<script>

var ip = "124.127.108.133";

            var url = "http://ip.taobao.com/service/getIpInfo.php?ip=" + ip;

            $.getJSON(url, function (json) {

                var myprovince2 = json.data.area;

                var mycity2 = json.data.region;

                alert("您所在的城市是:" + myprovince2 + mycity2);

            });

</script>

太平洋IP地址库API接口

http://whois.pconline.com.cn/?ip=[ip地址字符串]

另外:还有google、搜狐等提供对应的接口,大家可以自己试一试。

搜狐IP地址查询接口(默认GBK):http://pv.sohu.com/cityjson

     搜狐IP地址查询接口(可设置编码):http://pv.sohu.com/cityjson?ie=utf-8

     搜狐另外的IP地址查询接口:http://txt.go.sohu.com/ip/soip

3.获取客户端IP方法

<script>

var url = 'http://chaxun.1616.net/s.php?type=ip&output=json&callback=?&_=' + Math.random();

            $.getJSON(url, function(data) {

                alert(data.Ip);

            });

</script>

今天就写到这吧,还有好多工作需要去完成,等有时间了可以试试其它接口。欢迎大家来拍砖,提供更好的方法。

Javascript 相关文章推荐
JS跨域代码片段
Aug 30 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
Apr 07 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
Oct 12 Javascript
实例详解angularjs和ajax的结合使用
Oct 22 Javascript
Angularjs中如何使用filterFilter函数过滤
Feb 06 Javascript
jQuery绑定事件的几种实现方式
May 09 Javascript
CSS3 media queries结合jQuery实现响应式导航
Sep 30 Javascript
原生js实现addclass,removeclass,toggleclasss实例
Nov 24 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
Aug 01 jQuery
js中自定义react数据验证组件实例详解
Oct 19 Javascript
JavaScript 反射学习技巧
Oct 16 Javascript
vue elementUI表格控制对应列
Apr 13 Vue.js
node.js中的fs.chmodSync方法使用说明
Dec 18 #Javascript
node.js中的fs.chmod方法使用说明
Dec 18 #Javascript
原生Ajax 和jQuery Ajax的区别示例分析
Dec 17 #Javascript
jQuery中;function($,undefined) 前面的分号的用处
Dec 17 #Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
Dec 17 #Javascript
javascript实现根据身份证号读取相关信息
Dec 17 #Javascript
node.js中的fs.appendFile方法使用说明
Dec 17 #Javascript
You might like
咖啡知识 咖啡养豆要养多久 排气又是什么
2021/03/06 新手入门
让的PHP代码飞起来的40条小技巧(提升php效率)
2010/04/12 PHP
php引用地址改变变量值的问题
2012/03/23 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
2014/01/15 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
2016/02/23 PHP
微信自定义分享php代码分析
2016/11/24 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
2019/04/15 PHP
javascript 写类方式之九
2009/07/05 Javascript
jQuery点击tr实现checkbox选中的方法
2013/03/19 Javascript
简单的代码实现jquery定时器
2013/11/17 Javascript
jQuery实现仿美橙互联两级导航菜单的方法
2015/03/09 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
javascript编程异常处理实例小结
2015/11/30 Javascript
jQuery实现textarea自动增长宽高的方法
2015/12/18 Javascript
js实现商品抛物线加入购物车特效
2020/11/18 Javascript
Javascript之面向对象--封装
2016/12/02 Javascript
使用ionic切换页面卡顿的解决方法
2016/12/16 Javascript
vue2.0获取自定义属性的值
2017/03/28 Javascript
JS+html5制作简单音乐播放器
2020/09/13 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
JS简单判断是否在微信浏览器打开的方法示例
2019/01/08 Javascript
jquery图片预览插件实现方法详解
2019/07/18 jQuery
在vue和element-ui的table中实现分页复选功能
2019/12/04 Javascript
node.js +mongdb实现登录功能
2020/06/18 Javascript
antd配置config-overrides.js文件的操作
2020/10/31 Javascript
使用Python判断质数(素数)的简单方法讲解
2016/05/05 Python
解决Spyder中图片显示太小的问题
2018/04/27 Python
python 中如何获取列表的索引
2019/07/02 Python
Python模拟登入的N种方式(建议收藏)
2020/05/31 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
CSS3 3D制作实战案例分析
2016/09/18 HTML / CSS
结婚典礼证婚词
2014/01/08 职场文书
纪委书记群众路线整改措施思想汇报
2014/10/09 职场文书
国庆节新闻稿
2015/07/17 职场文书
MySQL命令无法输入中文问题的解决方式
2021/08/30 MySQL