《移动端签到》——利用 JavaScript API实现定位

2024-08-27 20:48

本文主要是介绍《移动端签到》——利用 JavaScript API实现定位,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  小编在做签到项目的时候,定位可是个不可缺少的功能,当我们签到时,我们只能在公司里签到,怎样判断你是否在公司里面哪——定位?定位可以将我们的详细的经纬度找出来,然后根据经纬度我们可以逆解析位置的详细信息,比如说哪个城市啦,街道地址等等。

  手机定位大约分为两种:

  1、GPS定位:通过接收卫星信号,直接得到手机的位置坐标。(不需要联网,可以完全离线定位,但是必须在天空比较开阔的地方,否则接收不到卫星信号。GPS定位,精度较高,可达到10米,但室内不可用,且超级费电。)。

  2、网络定位:网络定位,分为wifi定位和基站定位,都是通过获取wifi或者基站信息,然后查询对应的wifi或者基站位置数据库,得到的定位地点。定位数据库可以不断完善不断补充,所以,越定位越准确。

  2.1、WIFI定位:通过扫描手机周围的WIFI接入点,再把扫描到的接入点信息通过服务器对比,服务器再告诉手机所在的位置(这种定位方式需要互联网支持且WIFI要打开)。    

  2.2、基站定位:手机直接把自己所连接的基站以及能够扫描到的基站信息提供给服务器(比如中国移动的基站,每个基站间隔几百到几千米,每个基站都有自己的代码),再由服务器告知手机所在位置(也需要互联网支持)。

  像浏览器定位、ip定位、经纬度定位、等等,这些都属于网络定位。今天小编给大家介绍一下浏览器定位。

  HTML代码

<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="viewport" content="initial-scale=1.0, user-scalable=no" /><style type="text/css">body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";}</style><script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密钥"></script><title>浏览器定位</title>
</head>
<body><div id="allmap"></div>
</body>
</html>

  JS代码

// 百度地图API功能var map = new BMap.Map("allmap");var point = new BMap.Point(116.331398,39.897445);map.centerAndZoom(point,12);var geolocation = new BMap.Geolocation();geolocation.getCurrentPosition(function(r){if(this.getStatus() == BMAP_STATUS_SUCCESS){var mk = new BMap.Marker(r.point);map.addOverlay(mk);map.panTo(r.point);alert('您的位置:'+r.point.lng+','+r.point.lat);}else {alert('failed'+this.getStatus());}        },{enableHighAccuracy: true})//关于状态码//BMAP_STATUS_SUCCESS	检索成功。对应数值“0”。//BMAP_STATUS_CITY_LIST	城市列表。对应数值“1”。//BMAP_STATUS_UNKNOWN_LOCATION	位置结果未知。对应数值“2”。//BMAP_STATUS_UNKNOWN_ROUTE	导航结果未知。对应数值“3”。//BMAP_STATUS_INVALID_KEY	非法密钥。对应数值“4”。//BMAP_STATUS_INVALID_REQUEST	非法请求。对应数值“5”。//BMAP_STATUS_PERMISSION_DENIED	没有权限。对应数值“6”。(自 1.1 新增)//BMAP_STATUS_SERVICE_UNAVAILABLE	服务不可用。对应数值“7”。(自 1.1 新增)//BMAP_STATUS_TIMEOUT	超时。对应数值“8”。(自 1.1 新增)

  我们还可以通过经纬度解析地址,有通过前台JS解析的,还有通过后台C#代码来实现的,不过原理差不多,大家看一下。

  通过后台C#代码来解析地址

 public ActionResult GetAddress(string lat, string lng){string strBuff = "";Uri httpURL = new Uri(string.Format("http://api.map.baidu.com/geocoder/v2/?ak=你的key值f&location={0},{1}&output=json&pois=0&coordtype=wgs84ll", lat, lng));//HttpWebRequest类继承于WebRequest,并没有自己的构造函数,需通过WebRequest的Creat方法 建立,并进行强制的类型转换   HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(httpURL);///通过HttpWebRequest的GetResponse()方法建立HttpWebResponse,强制类型转换   HttpWebResponse httpResp = (HttpWebResponse)httpReq.GetResponse();//GetResponseStream()方法获取HTTP响应的数据流,并尝试取得URL中所指定的网页内容   //若成功取得网页的内容,则以System.IO.Stream形式返回,若失败则产生ProtoclViolationException错 误。在此正确的做法应将以下的代码放到一个try块中处理。这里简单处理   Stream respStream = httpResp.GetResponseStream();//返回的内容是Stream形式的,所以可以利用StreamReader类获取GetResponseStream的内容,并以   //StreamReader类的Read方法依次读取网页源程序代码每一行的内容,直至行尾(读取的编码格式:UTF8)   StreamReader respStreamReader = new StreamReader(respStream, Encoding.UTF8);strBuff = respStreamReader.ReadToEnd();return Json(strBuff, JsonRequestBehavior.AllowGet);}

  上面是以Json串的形式返回详细地址的。

  通过JS直接逆解析 

var map = new BMap.Map("allmap");var point = new BMap.Point(116.331398,39.897445);//这里是我们要输入的经纬度map.centerAndZoom(point,12);var geoc = new BMap.Geocoder();    map.addEventListener("click", function(e){        var pt = e.point;geoc.getLocation(pt, function(rs){var addComp = rs.addressComponents;alert(addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber);});        });
  上面就是具体的浏览器定位实例,还有通过IP定位,城市定位,大家可以去百度API或者高德API上看看,原理大致相同,但是网络定位相比GPS定位来说,确实不如GPS定位准确,要想定位准确,还是需要用GPS定位方式。

这篇关于《移动端签到》——利用 JavaScript API实现定位的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112742

相关文章

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

Java.lang.InterruptedException被中止异常的原因及解决方案

《Java.lang.InterruptedException被中止异常的原因及解决方案》Java.lang.InterruptedException是线程被中断时抛出的异常,用于协作停止执行,常见于... 目录报错问题报错原因解决方法Java.lang.InterruptedException 是 Jav

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统