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

 更新时间:2014年12月18日 08:49:53   投稿:hebedich  
这篇文章主要介绍了使用JS获取当前地理位置方法汇总,需要的朋友可以参考下

今年的项目开发中,初步接触了移动端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>
  

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

相关文章

  • Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)

    Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)

    最近在做项目时用到了定时执行的js方法,setInterval与setTimeout时间长了不用有些生疏了,所以自己总结了一下,记下来,以便以后使用。
    2010-06-06
  • javascript学习笔记之10个原生技巧

    javascript学习笔记之10个原生技巧

    首先在这里要非常感谢无私分享作品的网友们,这些代码片段主要由网友们平时分享的作品代码里面和经常去逛网站然后查看源文件收集到的。把平时网站上常用的一些实用功能代码片段通通收集起来,方便网友们学习使用,利用好的话可以加快网友们的开发速度,提高工作效率。
    2014-05-05
  • js实现日历

    js实现日历

    这篇文章主要介绍了js如何实现日历,帮助大家完成需求,提高对js的理解,感兴趣的朋友可以了解下
    2020-11-11
  • JavaScript中如何在一个循环中等待示例代码详解

    JavaScript中如何在一个循环中等待示例代码详解

    这篇文章主要介绍了在JavaScript中如何在一个循环中等待(附代码示例),下面是如何使用for..of 循环来迭代一个数组并在循环内等待,需要的朋友可以参考下
    2022-08-08
  • smartcrop.js智能图片裁剪库

    smartcrop.js智能图片裁剪库

    为了测试这个智能识别插件,我试了很多壁纸图片,都能智能裁剪出图片的主体部分,转而尝试了一下chrome和Firefox以及IE,发现IE只有10以上的版本才支持,chrome和Firefox支持,手机浏览器不支持,这到底是啥黑科技??今天我们就来详细看看
    2015-10-10
  • JavaScript基础——使用Canvas绘图

    JavaScript基础——使用Canvas绘图

    这篇文章主要介绍了JavaScript基础——使用Canvas绘图,Canvas也真的跟现实生活中的画布非常相似,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-11-11
  • js通过八个点 拖动改变div大小的实现方法

    js通过八个点 拖动改变div大小的实现方法

    本篇文章主要是对js通过八个点 拖动改变div大小的实现方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-03-03
  • js 分页全选或反选标识实现代码

    js 分页全选或反选标识实现代码

    分页全选或反选标识 对多选按钮操作。 批量全选添加、批量移除。 行单选添加、移除。 分页之后(全选或不选)状态标识依然存在
    2011-08-08
  • 全面解析Bootstrap排版使用方法(文字样式)

    全面解析Bootstrap排版使用方法(文字样式)

    这篇文章全面解析了Bootstrap排版使用方法,本文重点介绍Bootstrap排版中的文字样式设置,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • js实现点击按钮随机生成背景颜色

    js实现点击按钮随机生成背景颜色

    这篇文章主要为大家详细介绍了js实现点击按钮随机生成背景颜色,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09

最新评论