js获取地理位置并记录

正常情况下,一般都是通过请求时附带的ip给后端,然后再通过ip解析出客户端访问所在的地理位置,那么,如果不通过ip呢。让用户手动授权允许访问客户端的位置,以此获取地址位置精度更高。

不知你们在访问一些网站时,是否遇到下面这种情况:

 

tip:在测试时,发现一些浏览器和手机端浏览器点击没反应。不知道什么情况。

这里用到的是浏览器的navigator.geolocation.getCurrentPosition方法。允许授权后获取到的是经纬度。因此还需要通过百度api转为具体的位置才行(为啥不知道通过请求ip去解析出地理位置呢,感觉好奇葩的需求,用户体验也不好)。

直接上代码吧。

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.0,user-scalable=no"><title>JS获取当前地理位置的方法</title>
</head><body><button onclick="getLocation()">获取经纬度</button><p id="ttt"></p><p id="address"></p>
</body><!--引用百度地图API文件, 您的秘钥的获取方式是注册为百度地图的开发者,创建应用-->
<script type="text/javascript" src="http://api.map.baidu.com/api?v=3.0&ak=你的百度ak"></script>
<script type="text/javascript">// 创建一个函数,主要功能是在调用html5的geolocation()前,先判断当前浏览器是否支持html5,(PC绝大部分浏览器不支持或者拒绝html5定位)function getLocation() {var options = {enableHighAccuracy: true,maximumAge: 1000};if (navigator.geolocation) {// 走到这里说明,浏览器支持geolocation,参数里有两个回调函数,一个是定位成功后的处理操作,一个是定位失败后的处理操作,另外一个参数没有研究过navigator.geolocation.getCurrentPosition(onSuccess, onError, options);} else {// 否则浏览器不支持geolocationalert('您的浏览器不支持地理位置定位!');}}// 成功时的回调函数// 第一步获取定位成功返回的经纬度数据,然后结合百度那边提供的接口进行具体位置的转换,最后还有一个数据提交的方法,要跟自己的业务操作了function onSuccess(position) {// 返回用户位置// 经度var longitude = position.coords.longitude;// 纬度var latitude = position.coords.latitude;var tttP = document.getElementById("ttt");tttP.innerHTML = "纬度:" + latitude + ",经度:" + longitude;// 根据经纬度获取地理位置,不太准确,获取城市区域还是可以的var map = new BMap.Map("allmap");var point = new BMap.Point(longitude, latitude);var gc = new BMap.Geocoder();gc.getLocation(point, function (rs) {console.log("地理位置:",rs);var addComp = rs.addressComponents;var address = document.getElementById("address");var str = "纬度:" + latitude + ",经度:" + longitude + ",地址:"+addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber;address.innerHTML = addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber;fetch('save_address.php', {method: 'POST',headers: {'Content-Type': 'application/x-www-form-urlencoded',},body: 'address=' + str}).then(response => response.text()).then(data => {console.log(data);}).catch(error => {console.error('Error:', error);});});}// 失败时的回调函数// 这里是错误提示信息function onError(error) {switch (error.code) {case 1:alert("位置服务被拒绝!");break;case 2:alert("暂时获取不到位置信息!");break;case 3:alert("获取信息超时!");break;case 4:alert("未知错误!");break;}}
</script>
</html>

获取成功后,是这样的:

这里将获取的经纬度及位置信息发送给了php文件,通过php文件记录在address.txt文本中。

save_address.php

<?php
// 设置时区为上海
date_default_timezone_set('Asia/Shanghai');// 检查是否收到POST请求
if ($_SERVER['REQUEST_METHOD'] === 'POST') {// 检查是否接收到名为 'address' 的参数if (isset($_POST['address'])) {// 获取前端传递的 'address' 参数的值$address = $_POST['address'];// 获取当前时间$timestamp = date('Y-m-d H:i:s');// 打开或创建一个名为 'address.txt' 的文本文件,并以追加模式写入时间、地址信息和换行符$file = fopen('address.txt', 'a');fwrite($file, "Time: " . $timestamp . " - Address: " . $address . "\n");fclose($file);echo "Address recorded successfully: " . $address;} else {echo "Error: 'address' parameter is missing.";}
} else {echo "Error: Only POST requests are allowed.";
}
?>

后面可能会用的上,特此记录下!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/498491.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode : 215. 数组中的第 K 个最大元素

给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 思路&#xff1a;最开始排序算法&…

小白水平理解面试经典题目leetcode 606. Construct String from Binary Tree【递归算法】

Leetcode 606. 从二叉树构造字符串 题目描述 例子 小白做题 坐在自习室正在准备刷题的小白看到这道题&#xff0c;想想自己那可是没少和白月光做题呢&#xff0c;也不知道小美刷题刷到哪里了&#xff0c;这题怎么还没来问我&#xff0c;难道是王谦谦去做题了&#xff1f; 这…

C语言实现21点游戏【单人模式,双人模式,单-多电脑模式】,21点又名黑杰克(英文:Blackjack)

项目背景&#xff1a; 21点又名黑杰克&#xff08;英文&#xff1a;Blackjack&#xff09; &#xff0c;起源于法国&#xff0c;已流传到世界各地。21点&#xff0c;是一种使用扑克牌玩的赌博游戏。亦是唯一一种在赌场中可以在概率中战胜庄家的一种赌博游戏。 现在在世界各地…

【机器学习】特征选择之包裹式特征选择法

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

深入浅出HTML网页结构:构建您的第一个网页

深入浅出HTML网页结构&#xff1a;构建您的第一个网页 在之前的文章中&#xff0c;我们探索了HTML的奥秘&#xff0c;学习了基础标签的使用。本文将带您一步步构建自己的第一个网页&#xff0c;从零开始&#xff0c;让复杂的HTML结构变得简单易懂。 一、引言 HTML&#xff0c;…

【软件设计师】多元化多方面了解多媒体技术的内容

&#x1f413; 多媒体技术基本概念 多媒体主要是指文字、声音和图像等多种表达信息的形式和媒体&#xff0c;它强调多媒体信息的综合和集成处理。多媒体技术依赖于计算机的数字化和交互处理能力&#xff0c;它的关键是信息压缩技术和光盘存储技术。 亮度 亮度是光作用于人眼时所…

ISP代理是什么?跨境账号养号为什么要选择它?

在跨境出海业务中&#xff0c;代理IP对于您的在线任务至关重要&#xff0c;尤其是对于那些运行多个帐户的人来说。为您的帐户选择正确类型的代理对于确保帐户安全非常重要&#xff0c;劣质的IP容易使账号遭受封号风险。IPFoxy的多种代理IP类型应用范围各有侧重&#xff0c;其中…

飞天使-学以致用-devops知识点3-安装jenkins

文章目录 构建带maven环境的jenkins 镜像安装jenkinsjenkins yaml 文件安装插件jenkins 配置k8s创建用户凭证 构建带maven环境的jenkins 镜像 # 构建带 maven 环境的 jenkins 镜像 docker build -t 192.168.113.122:8858/library/jenkins-maven:jdk-11 .# 登录 harbor docker …

代码随想录刷题训练营day25:LeetCode(216)组合总和III、LeetCode(17)电话号码的字母组合

代码随想录刷题训练营day25&#xff1a;LeetCode(40)组合总和 II、LeetCode(216)组合总和III、LeetCode(17)电话号码的字母组合 LeetCode(40)组合总和 II 题目 代码 import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util…

仿牛客网项目---用户注册登录功能的实现

从今天开始我们来写一个新项目&#xff0c;这个项目是一个完整的校园论坛的项目。主要功能模块&#xff1a;用户登录注册&#xff0c;帖子发布和热帖排行&#xff0c;点赞关注&#xff0c;发送私信&#xff0c;消息通知&#xff0c;社区搜索等。这篇文章我们先试着写一下用户的…

Unity(第十四部)光照

原始的有默认灯光、除了默认的你还可以创建 1、定向光源&#xff08;类似太阳、从无限远的地方射向地面的光&#xff0c;光源位置并不影响照射角度等&#xff0c;不同方向的旋转影响角度和明亮&#xff09; 1. 颜色&#xff1a;调整光的颜色2. 模式&#xff1a;混合是实时加烘…

kafka三节点集群平滑升级过程指导

一、前言 Apache Kafka作为常用的开源分布式流媒体平台&#xff0c;可以实时发布、订阅、存储和处理数据流,多用于作为消息队列获取实时数据&#xff0c;构建对数据流的变化进行实时反应的应用程序&#xff0c;已被数千家公司用于高性能数据管道、流分析、数据集成和任务关键型…