精华内容
下载资源
问答
  • 用相对简单的JavaScript代码,可以创建出能确定用户地理位置详细信息的Web应用,包括经纬度以及海拔等。一些Web应用甚至能通过监控用户位置随时间的移动来提供导航功能,其中还综合了GoogleMaps API这样的地图系统。
  • 开发地图定位,选择位置功能 我们直接修改index页面来做这个功能。 准备 新建imgs目录,加入2个图标(ic_location和ic_position),用于标记当前位置,和地图中央位置。 添加定位功能 修改app.js
  • vue定位 获取用户位置信息

    万次阅读 2019-07-04 10:17:43
    关于定位功能尝试了很多种方法,h5定位,百度地图定位,高德地图定位,因为ip定位只能定位到城市,所以我选用的是浏览器定位。...百度定位定位位置与实际位置偏差太大,我从郑州的一个小县城定位到了...

    关于定位功能尝试了很多种方法,h5定位,百度地图定位,高德地图定位,因为ip定位只能定位到城市,所以我选用的是浏览器定位。总结如下:
    H5定位:定位相对较准,但是部分浏览器不兼容,我主要是在手机上测试的,UC和百度浏览器还有ios的微信浏览器是兼容的,其他的浏览器如华为浏览器、搜狗浏览器、QQ浏览器、安卓的微信浏览器全都不兼容,后来发现原来是我的网站是http协议的,升级到https协议就好了,但是坐标系不转换误差会比较大。
    百度定位:定位的位置与实际位置偏差太大,我从郑州的一个小县城定位到了郑州火车站,偏差18公里,百度官方的示例也是如此。浏览器的兼容性倒是可以,但是偏差太大,因为我要做的是给用户推荐路线,所以这个对我来说已经失去了意义。
    高德定位:定位位置最准确,但是不太稳定,有时候能定位成功,有时候定位不成功,官方示例也是这样的,不知道是不是我这边信号的原因,因为稳定性的原因没有测试它的在各个浏览器的运行情况。
    定位的能否成功的因素很多:
    1.浏览器不支持原生定位接口,如IE较低版本的浏览器等;
    2.用户禁用了定位权限,需要用户开启设备和浏览器的定位权限,并在浏览器弹窗中点击“允许使用定位”选项。
    3.览器禁止了非安全域的定位请求,比如Chrome、IOS10已陆续禁止,这时候需要升级站点到HTTPS。注意Chrome不会禁止localhost等域名HTTP协议下的定位;
    4.浏览器定位超时,包括原生的超时,可以适当增加超时属性的设定值以减少这一现象,另外还有个别浏览器(如google Chrome浏览器等)本身的定位接口是黑洞,通过其请求定位完全没有回应,也会超时返回失败。
    5.定位失败,Chrome、火狐以及部分套壳浏览器接入的定位服务在国外,有较大限制,失败率高。
    影响定位精度的因素:
    1.手机是否打开了GPS。
    2.天气、建筑物等的影响。
    3.坐标系统不同,没有进行换算。
    最后,附上我的代码,因为前期做坐标点标注的时候是用的百度地图,所以尽管定位的时候没有用到百度地图,还是把它引入了。我是优先选用H5定位,定位失败的话改用高德地图定位。最后换算成百度坐标实现推荐乘车路线的功能,代码如下:
    main.js:

    import AMap from "vue-amap";//高德地图
    Vue.use(AMap);
    AMap.initAMapApiLoader({
      key: "你的高德key",
      plugin: ["AMap.Scale", "AMap.OverView", "AMap.ToolBar", "AMap.MapType","AMap.Geolocation"],
      v: "1.4.4"
    });
    

    页面内容:

    <template>
      <div class="welcomeNav" v-wechat-title="$route.meta.title">
        <div class="back">
          [外链图片转存失败(img-p7JCjXvd-1562206482460)(https://mp.csdn.net/assets/img/back.jpg)]
        </div>
        <div id="container"></div><!-- 高德地图容器 -->
        <div class="content">
          <div class="map-area" :id="mapId"></div><!-- 百度地图容器 -->
        </div>
        <bottom></bottom>
      </div>
    </template>
    
    <script>
    import { Toast } from "mint-ui";
    import { Indicator } from "mint-ui";
    import loadBMap from "../assets/js/map.js";
    import bottom from "../components/bottom";
    import { setTimeout } from "timers";
    import { lazyAMapApiLoaderInstance } from "vue-amap";
    export default {
      name: "welcomeNav",
      components: {
        bottom
      },
      data() {
        return {
          mapId: "BMap-" + parseInt(Date.now() + Math.random()),
          myMap: null,
          keyword: "",
          lng: 0,
          lat: 0,
          success: false,
          center: [121.59996, 31],
          ak: "你的百度key",
          geolocation: {},
          type3: [550, 30]
        };
      },
      methods: {
        initMap() {
          loadBMap(this.ak)
            .then(() => {
              // 百度地图API功能
              var self = this;
              this.myMap = new BMap.Map(this.mapId); // 创建Map实例
              this.geolocation = new BMap.Geolocation();
              self.myMap.centerAndZoom(new BMap.Point(113.7235, 34.711), 16);
              //添加地图类型控件
              this.myMap.addControl(
                new BMap.MapTypeControl({
                  mapTypes: [BMAP_NORMAL_MAP, BMAP_HYBRID_MAP]
                })
              );
              this.myMap.enableScrollWheelZoom(true); //开启鼠标滚轮缩放
              self.ajax("post", this.host + "/Navigation/selectAll", {}, function(
                //获取标注点
                res
              ) {
                for (var i in res.data) {
                  var point = new BMap.Point(
                    res.data[i].longitude,
                    res.data[i].dimensionality
                  );
                  var marker = new BMap.Marker(point); // 创建标注
                  self.myMap.addOverlay(marker); // 将标注添加到地图中
                  var label = new BMap.Label(res.data[i].label, {
                    offset: new BMap.Size(20, -10)
                  });
                  marker.setLabel(label);
                }
                if (res.data.length > 0) {
                  if (navigator.geolocation.getCurrentPosition) {
                    //h5定位
                    Indicator.open("定位中...");
                    navigator.geolocation.getCurrentPosition(
                      function(position) {
                        var p1 = new BMap.Point(
                          position.coords.longitude,
                          position.coords.latitude
                        );
                        setTimeout(function() {
                          var convertor = new BMap.Convertor();
                          var pointArr = [];
                          pointArr.push(p1);
                          convertor.translate(
                            pointArr,
                            self.getTransType(position.coords.accuracy), //获取需转换的类型
                            5,
                            function(data) {
                              if (data.status === 0) {
                                p1 = data.points[0];
                              }
                              var mk = new BMap.Marker(p1);
                              self.myMap.addOverlay(mk); //标出所在地
                              var p2 = new BMap.Point(
                                res.data[0].longitude,
                                res.data[0].dimensionality
                              );
                              var transit = new BMap.TransitRoute(self.myMap, {
                                renderOptions: { map: self.myMap }
                              });
                              transit.search(p1, p2);
                              Indicator.close();
                            }
                          );
                        }, 1000);
                      },
                      function(error) {
                        //H5定位失败之后调用高德地图
                        lazyAMapApiLoaderInstance.load().then(() => {
                          var map = new AMap.Map("container", {
                            resizeEnable: true
                          });
                          AMap.plugin("AMap.Geolocation", function() {
                            var geolocation = new AMap.Geolocation({
                              enableHighAccuracy: true, //是否使用高精度定位,默认:true
                              timeout: 10000, //超过10秒后停止定位,默认:5s
                              buttonPosition: "RB", //定位按钮的停靠位置
                              buttonOffset: new AMap.Pixel(10, 20), //定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)
                              zoomToAccuracy: true //定位成功后是否自动调整地图视野到定位点
                            });
                            map.addControl(geolocation);
                            geolocation.getCurrentPosition(function(
                              status,
                              result
                            ) {
                              if (status == "complete") {
                                self.lat = result.position.lat;
                                self.lng = result.position.lng;
                                var position = new BMap.Point(self.lng, self.lat);
                                setTimeout(function() {
                                  var convertor = new BMap.Convertor();
                                  var pointArr = [];
                                  pointArr.push(position);
                                  convertor.translate(pointArr, 1, 5, function(
                                    data
                                  ) {
                                    if (data.status === 0) {
                                      var p1 = data.points[0];
                                      var p2 = new BMap.Point(
                                        res.data[0].longitude,
                                        res.data[0].dimensionality
                                      );
                                      var transit = new BMap.TransitRoute(
                                        self.myMap,
                                        {
                                          renderOptions: { map: self.myMap }
                                        }
                                      );
                                      Indicator.close();
                                      transit.search(p1, p2);
                                    }
                                  });
                                }, 1000);
                              }else{
                                Indicator.close();
                                Toast('无法获取您的位置信息');
                              }
                            },function(){
                              Indicator.close();
                              Toast('无法获取您的位置信息');
                            });
                          });
                        });
                      },
                      { enableHighAccuracy: true, timeout: 5000, maximumAge: 0 }
                    );
                  } else {
                    Toast("您的浏览器不支持获取位置信息!");
                  }
                }
              });
            })
            .catch(err => {
              Toast("您的浏览器不支持地图的调用!");
            });
        },
        getTransType(accuracy) {
          if (window.localStorage) {
            var transType = localStorage.getItem("xdlcfwapp_transType");
            if (transType != null && transType != "") {
              return transType;
            }
          }
    
          for (var i = 0; i < this.type3.length; i++) {
            if (this.type3[i] == accuracy) {
              localStorage.setItem("xdlcfwapp_transType", 3);
              return 3;
            }
          }
          localStorage.setItem("xdlcfwapp_transType", 1);
          return 1;
        },
        search() {}
      },
      created() {
        var self = this;
        self.initMap();
      }
    };
    </script>
    <style scoped>
    .welcomeNav {
      padding-top: 44px;
      padding-bottom: 50px;
      background-color: #f9f9f9;
    }
    .content {
      padding: 8px 0 8px;
      text-align: center;
    }
    .bm-view {
      width: 100%;
      height: 600px;
    }
    .search-input {
      text-indent: 3em;
      border-radius: 3px;
      width: 95%;
      height: 35px;
      margin: 5px auto 10px;
    }
    .search {
      width: 18px;
      position: absolute;
      left: 6%;
      top: 12px;
    }
    .map-area {
      width: 100%;
      height: 500px;
    }
    </style>
    
    

    不足之处还望前辈们不吝赐教!谢谢!

    展开全文
  • 腾讯位置 - 服务端IP定位(结尾附视频)

    千次阅读 多人点赞 2021-01-16 23:11:40
    本文关键字:腾讯位置定位、服务端、IP定位、使用教程。通过获取客户端或终端设备IP地址来获取其当前所在地理位置,可以精确到市级,常用于显示当地城市天气预报、初始化用户城市等非精确定位场景。

    写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成,愿将昔日所获与大家交流一二,希望对学习路上的你有所助益。同时,博主也想通过此次尝试打造一个完善的技术图书馆,任何与文章技术点有关的异常、错误、注意事项均会在末尾列出,欢迎大家通过各种方式提供素材。

    • 对于文章中出现的任何错误请大家批评指出,一定及时修改。
    • 有任何想要讨论和学习的问题可联系我:zhuyc@vip.163.com。
    • 发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。

    腾讯位置 - 服务端IP定位(结尾附视频)

    本文关键字:腾讯位置、定位、服务端、IP定位、使用教程

    一、功能介绍

    通过获取客户端或终端设备IP地址来获取其当前所在地理位置,可以精确到市级,常用于显示当地城市天气预报、初始化用户城市等非精确定位场景。

    二、密钥申请

    1. 用户登录

    打开腾讯位置服务主页:https://lbs.qq.com,点击右上角的登录按钮:

    2. 验证信息

    点击控制台,进入开发者信息界面,补全基本用户信息,完成验证。

    3. 申请密钥

    点击左侧key与配额下的key管理

    点击创建新密钥,填写Key名称、描述、验证码,等待审核通过:

    创建成功后,可以在管理界面查看到密钥信息:

    4. 密钥配置

    密钥申请通过后,可以点击设置按钮修改名称及描述,并可以选择启用的产品,以及对调用规则进行限制:

    同时,可以在查看配额界面查看各接口的用量情况:
    在这里插入图片描述

    三、操作说明

    1. 接口文档入口

    滑动到上方菜单的开发文档 -> 选择服务端下的WebService API

    点击左侧的IP定位

    直达地址:https://lbs.qq.com/service/webService/webServiceGuide/webServiceIp

    2. 接口测试

    可以直接使用Postman工具来测试,或者使用Postwomen(Postman他女朋友,唉,连工具都成双入对了,写个代码都要被虐,罢了,好好打工)。
    由文档可知,接口的请求类型为GET,不填写ip时会使用请求端的IP(为公网IP,对概念不清楚的小伙伴可以参考我的另一篇文章:IP地址有什么用?),默认的数据返回格式为JSON,并且可以设置回调函数(在使用案例中演示)。

    在这里插入图片描述

    3. 测试结果

    只填写必要的key参数,返回结果如下:

    {
        "status": 0,
        "message": "query ok",
        "result": {
            "ip": "123.122.189.12",
            "location": {
                "lat": 39.90469,
                "lng": 116.40717
            },
            "ad_info": {
                "nation": "中国",
                "province": "北京市",
                "city": "北京市",
                "district": "",
                "adcode": 110000
            }
        }
    }
    

    字段含义可见下表(可在接口文档中找到):

    四、使用案例

    在代码中调用时,可以在服务端发送请求,也可以直接在客户端直接发送请求。在企业应用开发中,如果是web应用,应尽量保证在服务端处理,防止key泄露
    本文为简化案例及方便演示回调,直接在前端页面中发送请求,真正整合进项目时请综合考虑。

    1. 正常接收json

    直接使用jQuery的ajax即可在回调函数(success)中获取到数据,可以对结果进一步解析使用。

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8">
    		<title></title>
    		<script src="js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
    		<script type="text/javascript">
    			$.ajax({
    				type : 'get',
    				url : 'https://apis.map.qq.com/ws/location/v1/ip?key=替换为自己的key',
    				dataType : 'json',
    				success : function(data){
    					console.log(data);
    				}
    			})
    		</script>
    	</head>
    	<body>
    	</body>
    </html>
    

    2. 使用jsonp回调

    请求时,指定返回类型为jsonp,同时添加callback参数,指定回调函数为test:

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8">
    		<title></title>
    		<script src="js/jquery-1.7.1.min.js" type="text/javascript" charset="utf-8"></script>
    		<script type="text/javascript">
    			function test(data){
    				console.log("data:");
    				console.log(data);
    			}
    			$.ajax({
    				type : 'get',
    				url : 'https://apis.map.qq.com/ws/location/v1/ip?key=替换为自己的key&output=jsonp&callback=test',
    				dataType : 'jsonp'
    			})
    		</script>
    	</head>
    	<body>
    	</body>
    </html>
    

    3. 完整案例源码

    在这里插入图片描述

    五、视频直达

    视频地址:https://www.bilibili.com/video/BV1CX4y1K7oa,喜欢的小伙伴儿一定要三连加关注哦~

    腾讯位置 - 服务端IP定位

    写在结尾:作者力求做到将每个知识点细化,并且对于有关联的知识点都会使用传送门挂载链接。文章采用:“文字 + 配图 + 视频”的方式来进行展现,均是挤时间所作,希望看到这里能留下评论点个赞,略表支持!

    扫描下方二维码,加入官方粉丝微信群,可以与我直接交流,还有更多福利哦~

    在这里插入图片描述

    展开全文
  • 小程序定位,接入腾讯位置服务

    万次阅读 2019-06-19 10:24:11
    接入腾讯位置服务官方文档: https://lbs.qq.com/qqmap_wx_jssdk/index.html 一.接入腾讯位置服务步骤 公众号扫码注册,选择你要授权的小程序,到授权成功 然后腾讯位置服务页面会变成 注册新账号 ...

    接入腾讯位置服务官方文档:https://lbs.qq.com/qqmap_wx_jssdk/index.html

    一.接入腾讯位置服务步骤

    1. 公众号扫码注册,选择你要授权的小程序,到授权成功
    2. 然后腾讯位置服务页面会变成
      在这里插入图片描述
    3. 注册新账号
      在这里插入图片描述
    4. 注册成功
      在这里插入图片描述
    5. 申请key
      在这里插入图片描述
    6. 配置key
      在这里插入图片描述
      填写WebServiceAPI的授权白名单或授权IP
    7. 在微信小程序中设置域名
      开发 -> 开发设置 -> request合法域名 添加 https://apis.map.qq.com
      在这里插入图片描述

    二、在小程序中初始化腾讯位置服务

    1. 下载微信小程序JavaScriptSDK,并将js放在新建的lib文件夹下
    2. 载js中引入
    var QQMapWX = require('../../libs/qqmap-wx-jssdk.js');
    var qqmapsdk;
    Page({
        onLoad: function () {
            // 实例化API核心类
            qqmapsdk = new QQMapWX({
                key: '申请的key'
            });
        }
    })
    

    三、在小程序中定位

    微信小程序-获取当前城市位置
    1, 获取当前地理位置,首先要拿到用户的授权wx.openSetting;
    2,微信的getLocation接口,获取当前用户的地理位置(微信返回的是经纬度,速度等参数);
    3,腾讯位置服务的qqmapsdk.reverseGeocoder腾讯地图逆地址解析方法,根据坐标获取当前位置名称;

    小程序有个wx.getLocation方法可以实现定位获取经纬度,但是首先需要让用户给一下权限

    // miniprogram/pages/index.js
    var QQMapWX = require('../../../libs/qqmap-wx-jssdk.js');
    var qqmapsdk;
    Page({
      data: {
        cost: '--',
        scale: 18,
        longitude: '',
        latitude: '',
        markers: []
      },
      submit_order(){
        wx.navigateTo({
          url: '/pages/user/waitrec/waitrec'
        })
      },
      /**
       * 生命周期函数--监听页面加载
       */
      onLoad: function (options) {
        wx.getSetting({
          success: (res) => {
            // res.authSetting['scope.userLocation'] == undefined    表示 初始化进入该页面
            // res.authSetting['scope.userLocation'] == false    表示 非初始化进入该页面,且未授权
            // res.authSetting['scope.userLocation'] == true    表示 地理位置授权
            if (res.authSetting['scope.userLocation'] != undefined && res.authSetting['scope.userLocation'] != true) {
              wx.showModal({
                title: '请求授权当前位置',
                content: '需要获取您的地理位置,请确认授权',
                success: function (res) {
                  if (res.cancel) {
                    wx.showToast({
                      title: '拒绝授权',
                      icon: 'none',
                      duration: 1000
                    })
                  } else if (res.confirm) {
                    wx.openSetting({
                      success: function (dataAu) {
                        if (dataAu.authSetting["scope.userLocation"] == true) {
                          wx.showToast({
                            title: '授权成功',
                            icon: 'success',
                            duration: 1000
                          })
                          //再次授权,调用wx.getLocation的API
                          this.getAddress();
                        } else {
                          wx.showToast({
                            title: '授权失败',
                            icon: 'none',
                            duration: 1000
                          })
                        }
                      }
                    })
                  }
                }
              })
            } else {
              //调用wx.getLocation的API
              this.getAddress();
            }
          }
        });
        //判断全局变量寄件信息和收件信息,都存在则显示费用
        var app = getApp();
        if (app.globalData.send_info.address && app.globalData.receive_info.address) {
          this.setData({
            cost: 100
          })
        }
      },
      //获取定位信息
      getAddress(){
        // 实例化腾讯地图API核心类
        qqmapsdk = new QQMapWX({
          key: 'LXKBZ-IQY6X-XAM4F-ZTULL-OMKDQ-IBB3U'
        });
        var that = this;
        //获取当前位置
        wx.getLocation({
          type: 'wgs84',
          success: function (res) {
            var lat = res.latitude;
            var lon = res.longitude;
            //根据坐标获取当前位置名称,腾讯地图逆地址解析
            qqmapsdk.reverseGeocoder({
              location: { latitude: lat, longitude: lon },
              success: function (res) {
                var address = res.result.address;
                that.setData({
                  latitude: lat,
                  longitude: lon,
                  markers: [{
                    id: '1',
                    iconPath: "../../../images/icon_cur_position.png",
                    width: 22,
                    height: 32,
                    latitude: lat,
                    longitude: lon,
                    callout: {
                      content: address,
                      color: "#393939",
                      textAlign: 'center',
                      fontSize: 13,
                      borderRadius: 20,
                      bgColor: "#ffffff",
                      padding: 10,
                      display: "ALWAYS"
                    },
                  }]
                })
              }
            });
          }
        });
      }
    })
    

    相关官方网址
    wx.getLocation
    授权

    展开全文
  • Android原生GPS定位以及位置解析

    万次阅读 热门讨论 2017-12-28 13:34:33
    最近在写一个纯本地的APP项目,项目中要求获取当前坐标的经纬度以及城市名,以前只做过网络定位(百度API和高德API),但是这两个都需要联网实现。so,选择GPS无疑是最好的选择了。我大概的整理了一下关于GPS定位...

     

    最近在写一个纯本地的APP项目,项目中要求获取当前坐标的经纬度以及城市名,以前只做过网络定位(百度API和高德API),但是这两个都需要联网实现。so,选择GPS无疑是最好的选择了。我大概的整理了一下关于GPS定位这块的实现,记录一下吧。

     

    老套路,优缺点:

    优点:

    1、GPS方式准确度是最高的;

    2、GPS走的是卫星通信的通道,即使在没有网络连接的情况下也能用。

    缺点:

    1、比较耗电;

    2、绝大部分用户默认不开启GPS模块;(如果需要适配android6.0以上版本需要做权限申请)

    3、从GPS模块启动到获取第一次定位数据,可能需要比较长的时间;

    4、室内几乎无法使用。(这其中,缺点2,3都是比较致命的)

     

    总结的可能不全面,后面如果有深入了解再行修改吧。

     

    具体实现:

    1、GPS设置

     

    // 判断GPS是否正常启动
            if (!mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
                Toast.makeText(context, "请开启GPS导航...", Toast.LENGTH_SHORT).show();
                // 返回开启GPS导航设置界面
                Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                context.startActivityForResult(intent, 0);
                return;
            }


    2、设置查询条件

     

     

    // 为获取地理位置信息时设置查询条件
            String bestProvider = mLocationManager.getBestProvider(getCriteria(), true);

     

     

    private static Criteria getCriteria() {
            Criteria criteria = new Criteria();
            // 设置定位精确度 Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细
            criteria.setAccuracy(Criteria.ACCURACY_FINE);
            // 设置是否要求速度
            criteria.setSpeedRequired(false);
            // 设置是否允许运营商收费
            criteria.setCostAllowed(false);
            // 设置是否需要方位信息
            criteria.setBearingRequired(false);
            // 设置是否需要海拔信息
            criteria.setAltitudeRequired(false);
            // 设置对电源的需求
            criteria.setPowerRequirement(Criteria.POWER_LOW);
            return criteria;
       }

     

     

    3、获取地理位置

     

    // 获取位置信息
            // 如果不设置查询要求,getLastKnownLocation方法传人的参数为LocationManager.GPS_PROVIDER
            Location location = mLocationManager.getLastKnownLocation(bestProvider);


    4、监听状态

     

     

    // 监听状态
            mLocationManager.addGpsStatusListener(listener);
    // 状态监听
        GpsStatus.Listener listener = new GpsStatus.Listener() {
            public void onGpsStatusChanged(int event) {
                switch (event) {
                    // 第一次定位
                    case GpsStatus.GPS_EVENT_FIRST_FIX:
                        Log.i(TAG, "第一次定位");
                        break;
                    // 卫星状态改变
                    case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
                        Log.i(TAG, "卫星状态改变");
                        GpsStatus gpsStatus = mLocationManager.getGpsStatus(null);
                        // 获取卫星颗数的默认最大值
                        int maxSatellites = gpsStatus.getMaxSatellites();
                        // 创建一个迭代器保存所有卫星
                        Iterator<GpsSatellite> iters = gpsStatus.getSatellites()
                                .iterator();
                        int count = 0;
                        while (iters.hasNext() && count <= maxSatellites) {
                            GpsSatellite s = iters.next();
                            count++;
                        }
                        System.out.println("搜索到:" + count + "颗卫星");
                        break;
                    // 定位启动
                    case GpsStatus.GPS_EVENT_STARTED:
                        Log.i(TAG, "定位启动");
                        break;
                    // 定位结束
                    case GpsStatus.GPS_EVENT_STOPPED:
                        Log.i(TAG, "定位结束");
                        break;
                }
            }
        };


    5、绑定监听

     

    // 绑定监听,有4个参数
            // 参数1,设备:有GPS_PROVIDER和NETWORK_PROVIDER两种
            // 参数2,位置信息更新周期,单位毫秒
            // 参数3,位置变化最小距离:当位置距离变化超过此值时,将更新位置信息
            // 参数4,监听
            // 备注:参数2和3,如果参数3不为0,则以参数3为准;参数3为0,则通过时间来定时更新;两者为0,则随时刷新
    
            // 1秒更新一次,或最小位移变化超过1米更新一次;
            // 注意:此处更新准确度非常低,推荐在service里面启动一个Thread,在run中sleep(10000);然后执行handler.sendMessage(),更新位置
            mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, locationListener)
    // 位置监听
        private static LocationListener locationListener = new LocationListener() {
    
            //位置信息变化时触发
            public void onLocationChanged(Location location) {
                mLocation = location;
                Log.i(TAG, "时间:" + location.getTime());
                Log.i(TAG, "经度:" + location.getLongitude());
                Log.i(TAG, "纬度:" + location.getLatitude());
                Log.i(TAG, "海拔:" + location.getAltitude());
            }
    
            //GPS状态变化时触发
            public void onStatusChanged(String provider, int status, Bundle extras) {
                switch (status) {
                    // GPS状态为可见时
                    case LocationProvider.AVAILABLE:
                        Log.i(TAG, "当前GPS状态为可见状态");
                        break;
                    // GPS状态为服务区外时
                    case LocationProvider.OUT_OF_SERVICE:
                        Log.i(TAG, "当前GPS状态为服务区外状态");
                        break;
                    // GPS状态为暂停服务时
                    case LocationProvider.TEMPORARILY_UNAVAILABLE:
                        Log.i(TAG, "当前GPS状态为暂停服务状态");
                        break;
                }
            }
    
            //GPS开启时触发
            public void onProviderEnabled(String provider) {
                Location location = mLocationManager.getLastKnownLocation(provider);
                mLocation = location;
            }
    
            //GPS禁用时触发
            public void onProviderDisabled(String provider) {
                mLocation = null;
            }
        };

     

     

    6、AndroidManifest权限添加

     

        <!-- 粗略定位授权 -->
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
        <!-- 精细定位授权 -->
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>


    到此就结束了。我写了一个定位的工具类,现在贴上工具类的代码:

    GPSUtils:(这里是没有做6.0适配的)

     

    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.location.Address;
    import android.location.Criteria;
    import android.location.Geocoder;
    import android.location.GpsSatellite;
    import android.location.GpsStatus;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.location.LocationProvider;
    import android.os.Bundle;
    import android.provider.Settings;
    import android.util.Log;
    import android.widget.Toast;
    
    import java.util.Iterator;
    import java.util.List;
    import java.util.Locale;
    
    /**
     * Created by chenzhi on 2017/12/13 0013.
     * <p>
     * 如果需要适配6.0以上系统请处理权限问题
     */
    @SuppressLint("MissingPermission")
    public class GPSUtils {
    
        private static LocationManager mLocationManager;
    
        private static final String TAG = "GPSUtils";
    
        private static Location mLocation = null;
    
        private static Activity mContext;
    
        public GPSUtils(Activity context) {
            this.mContext = context;
            mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    
            // 判断GPS是否正常启动
            if (!mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
                Toast.makeText(context, "请开启GPS导航...", Toast.LENGTH_SHORT).show();
                // 返回开启GPS导航设置界面
                Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                context.startActivityForResult(intent, 0);
                return;
            }
    
            // 为获取地理位置信息时设置查询条件
            String bestProvider = mLocationManager.getBestProvider(getCriteria(), true);
            // 获取位置信息
            // 如果不设置查询要求,getLastKnownLocation方法传人的参数为LocationManager.GPS_PROVIDER
            Location location = mLocationManager.getLastKnownLocation(bestProvider);
    //        getLocationData(location);
            mLocation = location;
            // 监听状态
    //        mLocationManager.addGpsStatusListener(listener);
    
            // 绑定监听,有4个参数
            // 参数1,设备:有GPS_PROVIDER和NETWORK_PROVIDER两种
            // 参数2,位置信息更新周期,单位毫秒
            // 参数3,位置变化最小距离:当位置距离变化超过此值时,将更新位置信息
            // 参数4,监听
            // 备注:参数2和3,如果参数3不为0,则以参数3为准;参数3为0,则通过时间来定时更新;两者为0,则随时刷新
    
            // 1秒更新一次,或最小位移变化超过1米更新一次;
            // 注意:此处更新准确度非常低,推荐在service里面启动一个Thread,在run中sleep(10000);然后执行handler.sendMessage(),更新位置
            mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, locationListener);
        }
    
        /**
         * 返回查询条件
         *
         * @return
         */
        private static Criteria getCriteria() {
            Criteria criteria = new Criteria();
            // 设置定位精确度 Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细
            criteria.setAccuracy(Criteria.ACCURACY_FINE);
            // 设置是否要求速度
            criteria.setSpeedRequired(false);
            // 设置是否允许运营商收费
            criteria.setCostAllowed(false);
            // 设置是否需要方位信息
            criteria.setBearingRequired(false);
            // 设置是否需要海拔信息
            criteria.setAltitudeRequired(false);
            // 设置对电源的需求
            criteria.setPowerRequirement(Criteria.POWER_LOW);
            return criteria;
        }
    
    
        /**
         * @return Location--->getLongitude()获取经度/getLatitude()获取纬度
         */
        public static Location getLocation() {
            if (mLocation == null) {
                Log.e("GPSUtils", "setLocationData: 获取当前位置信息为空");
                return null;
            }
            return mLocation;
        }
    
        public static String getLocalCity(){
            if (mLocation==null){
                Log.e("GPSUtils", "getLocalCity: 获取城市信息为空");
                return "";
            }
            List<Address> result = getAddress(mLocation);
    
            String city = "";
            if (result != null && result.size() > 0) {
                city = result.get(0).getLocality();//获取城市
            }
            return city;
        }
    
        public static String getAddressStr(){
            if (mLocation==null){
                Log.e("GPSUtils", "getAddressStr: 获取详细地址信息为空");
                return "";
            }
            List<Address> result = getAddress(mLocation);
    
            String address = "";
            if (result != null && result.size() > 0) {
                address = result.get(0).getAddressLine(0);//获取详细地址
            }
            return address;
        }
    
        // 位置监听
        private static LocationListener locationListener = new LocationListener() {
    
            //位置信息变化时触发
            public void onLocationChanged(Location location) {
                mLocation = location;
                Log.i(TAG, "时间:" + location.getTime());
                Log.i(TAG, "经度:" + location.getLongitude());
                Log.i(TAG, "纬度:" + location.getLatitude());
                Log.i(TAG, "海拔:" + location.getAltitude());
            }
    
            //GPS状态变化时触发
            public void onStatusChanged(String provider, int status, Bundle extras) {
                switch (status) {
                    // GPS状态为可见时
                    case LocationProvider.AVAILABLE:
                        Log.i(TAG, "当前GPS状态为可见状态");
                        break;
                    // GPS状态为服务区外时
                    case LocationProvider.OUT_OF_SERVICE:
                        Log.i(TAG, "当前GPS状态为服务区外状态");
                        break;
                    // GPS状态为暂停服务时
                    case LocationProvider.TEMPORARILY_UNAVAILABLE:
                        Log.i(TAG, "当前GPS状态为暂停服务状态");
                        break;
                }
            }
    
            //GPS开启时触发
            public void onProviderEnabled(String provider) {
                Location location = mLocationManager.getLastKnownLocation(provider);
                mLocation = location;
            }
    
            //GPS禁用时触发
            public void onProviderDisabled(String provider) {
                mLocation = null;
            }
        };
    
        // 获取地址信息
        private static List<Address> getAddress(Location location) {
            List<Address> result = null;
            try {
                if (location != null) {
                    Geocoder gc = new Geocoder(mContext, Locale.getDefault());
                    result = gc.getFromLocation(location.getLatitude(),
                            location.getLongitude(), 1);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return result;
        }
    
    
        // 状态监听
        GpsStatus.Listener listener = new GpsStatus.Listener() {
            public void onGpsStatusChanged(int event) {
                switch (event) {
                    // 第一次定位
                    case GpsStatus.GPS_EVENT_FIRST_FIX:
                        Log.i(TAG, "第一次定位");
                        break;
                    // 卫星状态改变
                    case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
                        Log.i(TAG, "卫星状态改变");
                        GpsStatus gpsStatus = mLocationManager.getGpsStatus(null);
                        // 获取卫星颗数的默认最大值
                        int maxSatellites = gpsStatus.getMaxSatellites();
                        // 创建一个迭代器保存所有卫星
                        Iterator<GpsSatellite> iters = gpsStatus.getSatellites()
                                .iterator();
                        int count = 0;
                        while (iters.hasNext() && count <= maxSatellites) {
                            GpsSatellite s = iters.next();
                            count++;
                        }
                        System.out.println("搜索到:" + count + "颗卫星");
                        break;
                    // 定位启动
                    case GpsStatus.GPS_EVENT_STARTED:
                        Log.i(TAG, "定位启动");
                        break;
                    // 定位结束
                    case GpsStatus.GPS_EVENT_STOPPED:
                        Log.i(TAG, "定位结束");
                        break;
                }
            }
        };
    
    }

    最近一段时间,发现有好多同学都私信我要demo

    附上demo地址 :https://download.csdn.net/download/chenzhi0712/11151364

    git地址:https://github.com/westlifeChen/GPS-Demo

    展开全文
  • 开通腾讯位置服务 1.进入微信公众平台 https://mp.weixin.qq.com/ 2.登录进入小程序后台,选择 “开发 - 开发工具 - 腾讯位置服务” 3.点击 “开通”,进入授权扫码界面 4.使用微信扫码进行授权 5.绑定开发者...
  • 如下我们将位置定位的方法代码调整至创建地图方法之前 // 位置定位 var geolocation = new BMap.Geolocation(); geolocation.getCurrentPosition(function(r){ if(this.getStatus() == BMAP_STATU
  • 基于位置的服务简称LBS,主要的工作原理就是利用无线电通讯网络或GPS等定位方式来确定出移动设备所在的位置。 基于位置的服务所围绕的核心就是要先确定出用户所在的位置。一种是通过GPS定位,一种是通过网络定位。GPS...
  • 随着社会发展进步,一切都不再是路遥行远,行万里路也不是难事,去陌生的地方也不用担心地不熟啦,各种地图软件服务为我们解决了这一问题,其中腾讯位置服务更是其中佼佼者,腾讯地图提供的位置服务为大众提供了遍历...
  • 地理位置定位

    千次阅读 2019-03-21 10:14:56
    watchPosition()一直监视位置:主要是监视移动端用户的位置 三. clearWatch()清除监听位置 1. getCurrentPosition()获取用户(设备)当前位置 navigator.gelolcation.getCurrentPosition(success-cal...
  • 环境搭建注册,获取APPID(没有这个不能真鸡调试)下载微信web开发者工具(挺多bug,将就用)打开微信web开发者工具,扫码登录,新建小程序,输入APPID,勾选创建quick start项目。...开发地图定位
  • Android 百度地图定位显示当前位置

    千次阅读 多人点赞 2020-05-03 01:42:28
    文章目录配置百度地图获取 SHA1获取百度地图密钥(AK)配置 Android Studio显示地图配置 AndroidManifest.xml 文件在布局文件中添加地图容器初始化地图管理MapView生命周期定位到当前位置配置 AndroidManifest.xml ...
  • 首先需要在高德开放平台注册一个用户,并申请一个key和你的项目相关联,地址:https://lbs.amap.com/登录后进入:控制台→应用...PackageName一定要和你自己项目的报名对应上否则无法获取定位信息,如何获取上面有介绍
  • 1.介绍 关于腾讯地图开发的博客还是挺少的,此教程只是给一些初进入接入腾讯地图文档的作为参考,我也是一知半解,但是对于一些... 2.1:展示官方文档中的前端定位中的demo 上面二维码可以看到定位组件展示的效果 3.
  • 这篇文章主要是对百度地图进行定位当前的位置,同时在当前位置设置圆形覆盖物,后面会实现附近餐馆查找功能。文章比较基础,包括申请API Key、配置环境、官方文档介绍、使用BDLocationListener实现定位监听方法等,...
  • 本项目的出发点就是针对如何解决位置的实时共享问题,使得人们组队外出游玩时的安全性得到保障,还有让每个家庭成员之间可以随时随地地查看其他成员的位置,特别是让老人、小孩的安全得到家人的实时监护。...
  • 需要使手机定位的经纬度在国外,然后使用系统API获取到经纬度,再使用系统API进行逆地理编码,以获取详细的位置信息。 例如,我想要模拟定位的经纬度为:-122.030237,37.331705,然后获取的详细位置信息为:United ...
  • 特别注意在获取发布版本安全码时确定自己已经创建了一个****.jks文件,在控制台才能获取安全码。 第三步、修改Androidmanifest.xml文件 第四步、在mainActivity.java中添加定位代码 定位结果 附录:完整关键代码...
  • 提供了接收到的信号和原始信号,我们必须重新创建发射器随时间创建的路径,并将其与实际轨迹进行比较。 向我们提供了信号以及对实际位置的激光跟踪。 目标是执行信号处理和关联,以便能够通过到达时间差 (TDOA) 跟踪...
  • TextArea中定位光标位置

    千次阅读 2019-07-05 01:03:44
    在项目中,遇到一个场景:希望能在TextArea中输入某条记录中的明细(明细较...如果用户希望编辑文本中间的某条明细,也可以通过鼠标点击、或者键盘上的上下左右键来定位某个明细,并在页面上提示光标的焦点位置。 ...
  • js定位光标到输入框指定位置

    千次阅读 2018-03-09 17:04:20
    在提供友好用户界面时,常常要定位光标到输入框的指定位置。通常是尾部,好让用户接着输入信息。我们可以用javascript操作dom来实现,以下是实现的方法 1. function changeCursor(input, position) { 2. var...
  • 请在application标签中声明service组件,每个app拥有自己单独的定位service。 Java &lt;service android:name="com.amap.api.location.APSService"&gt;&lt;/service&gt; 然后,声明...
  • 在微信小程序中,我们可以通过调用wx.getLocation()获取到设备当前的地理位置信息,这个信息是当前位置的经纬度。如果我们想获取当前位置是处于哪个国家,哪个城市等信息,该如何实现呢? 实现方法 微信小程序中并...
  • JavaScript获取光标位置定位光标位置 某些业务在处理input的输入框的触发oninput时间,需要控制光标位置,此方法依赖于jQuery 获取光标位置 //获取光标位置 (function($){ $.fn.extend({ // 获取当前...
  • js使用百度地图及定位到当前位置

    千次阅读 2020-04-13 01:26:50
    //开启鼠标滚轮缩放 接着在页面上写入上面这些代码就可以实现显示地图和滚轮放大缩小功能,其实仔细看代码就看的到这里的地理位置是写死的,但当我们打开百度地图时,他是能够实时定位到我当前的位置的。...
  • 如何定位溢出点位置

    2020-03-24 09:55:39
    } 关掉保护机制: gcc -no-pie -fno-stack-protector -z execstack -m32 -o 3.exe 3.c 检查一下: checksec 3.exe 0x01 kali自带 msf-pattern_create -l 100 创建长度为100的字符串 运行我们的程序: start 一直下...
  • IOS虚拟定位 修改手机位置(Xcode)

    千次阅读 2020-12-19 16:20:32
    一、 iOS(mac、数据线一根、iphone、xcode): 打开MAC App store 下载Xcode ...在loog 里面创建一波 快捷键command+n 创建Gpx fille 文件 <?xml version="1.0" encoding="UTF-8" ?> <gpx version="1.
  • 地图实时定位我的位置

    千次阅读 2018-11-11 16:59:00
    首先需要显示地图,请看我的另一篇文章 ...然后启动定位功能标记我的位置 开启定位图层 setMyLocationEnabled(true) 构造定位数据 MyLocationData对象 设置定位数据,并配置定位图层的信息 关闭定位图...
  • 使用百度地图,定位你当前位置并显示1、准备 注册百度开发者账号 到百度地图开放平台创建应用(as获取SHA1值) 2、将sdk整到你的项目中去- 在你app的gradle.build中添加 dependencies { ...... compile files('libs...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 397,708
精华内容 159,083
关键字:

如何创建位置定位