JavaScript获取用户所在城市及地理位置可以通过浏览器的Geolocation API或第三方API实现。以下为详细攻略:
JavaScript获取用户所在城市及地理位置可以通过浏览器的Geolocation API或第三方API实现。以下为详细攻略:
1. 使用浏览器的Geolocation API
1.1 获取经纬度
使用Geolocation API可以获取用户的经纬度信息,从而进一步获取用户所在城市等位置信息。
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
const latitude = position.coords.latitude;
const longitude = position.coords.longitude;
console.log('经度:', longitude, '纬度:', latitude);
}, function() {
console.log('获取位置信息失败!');
});
} else {
console.log('浏览器不支持Geolocation API!');
}
如上述代码所示,首先判断浏览器是否支持Geolocation API。若支持,则调用getCurrentPosition
方法获取经纬度信息,并在回调函数中处理经纬度数据。
1.2 使用逆地理编码获取城市名
用户所在城市可以通过使用逆地理编码API将用户的经纬度信息转换为具体地址,并从中提取城市信息。
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
const latitude = position.coords.latitude;
const longitude = position.coords.longitude;
const geocoder = new google.maps.Geocoder();
geocoder.geocode({'location': {lat: latitude, lng: longitude}}, function(results, status) {
if (status === 'OK') {
if (results[0]) {
let city = '';
for (let i = 0; i < results[0].address_components.length; i++) {
if (results[0].address_components[i].types[0] === 'locality' || results[0].address_components[i].types[0] === 'administrative_area_level_1') {
city = results[0].address_components[i].long_name;
}
}
console.log('城市:', city);
} else {
console.log('未找到地址信息!');
}
} else {
console.log('逆地理编码失败!');
}
});
}, function() {
console.log('获取位置信息失败!');
});
} else {
console.log('浏览器不支持Geolocation API!');
}
在上述代码中,使用Google Maps JavaScript API中的Geocoder类将经纬度信息进行逆地理编码。成功获取地址信息后,遍历地址组件,找到类型为“locality”或“administrative_area_level_1”的组件,即可获取城市名称。
2. 使用第三方API
使用第三方API也可以获取用户所在位置信息,常见的API包括百度地图API、高德地图API等。以百度地图API为例:
//加载百度地图API
const BMap = window.BMap;
const geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(function(r){
if(this.getStatus() === BMAP_STATUS_SUCCESS) {
const point = r.point;
const geoc = new BMap.Geocoder();
geoc.getLocation(point, function(rs){
const addComp = rs.addressComponents;
console.log('城市:', addComp.city);
});
} else {
console.log('获取位置信息失败!');
}
},{enableHighAccuracy: true});
使用百度地图API的Geolocation类获取经纬度信息,然后使用Geocoder类将经纬度信息转换为地址信息。从地址信息中提取城市名称即可。
示例说明
示例1:在网页中显示用户当前所在城市
<html>
<head>
<meta charset="UTF-8">
<title>示例:获取用户所在城市</title>
</head>
<body>
<p id="city"></p>
<script>
const cityEl = document.getElementById('city');
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
const latitude = position.coords.latitude;
const longitude = position.coords.longitude;
const geocoder = new google.maps.Geocoder();
geocoder.geocode({'location': {lat: latitude, lng: longitude}}, function(results, status) {
if (status === 'OK') {
if (results[0]) {
let city = '';
for (let i = 0; i < results[0].address_components.length; i++) {
if (results[0].address_components[i].types[0] === 'locality' || results[0].address_components[i].types[0] === 'administrative_area_level_1') {
city = results[0].address_components[i].long_name;
}
}
cityEl.innerHTML = city;
} else {
console.log('未找到地址信息!');
}
} else {
console.log('逆地理编码失败!');
}
});
}, function() {
console.log('获取位置信息失败!');
});
} else {
console.log('浏览器不支持Geolocation API!');
}
</script>
</body>
</html>
以上代码将用户所在城市信息显示在了页面中,使用了Google Maps JavaScript API中的Geocoder类进行逆地理编码。
示例2:在控制台输出用户当前所在位置的经纬度以及城市名
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
const latitude = position.coords.latitude;
const longitude = position.coords.longitude;
console.log('经度:', longitude, '纬度:', latitude);
const geoc = new BMap.Geocoder();
geoc.getLocation(new BMap.Point(longitude, latitude), function(rs){
const addComp = rs.addressComponents;
console.log('城市:', addComp.city);
});
}, function() {
console.log('获取位置信息失败!');
});
} else {
console.log('浏览器不支持Geolocation API!');
}
以上代码将用户的经纬度信息以及城市名输出在了控制台中,使用了百度地图API进行位置信息获取。
本文标题为:JavaScript获取用户所在城市及地理位置
基础教程推荐
- 微信小程序多表联合查询的实现详解 2022-08-30
- Ajax + PHP session制作购物车 2023-02-14
- Jquery Ajax请求文件下载操作失败的原因分析及解决办法 2022-10-17
- 使用 JS 复制页面内容的三种方案 2024-01-03
- Vue3停止支持IE的几点原因 2023-10-08
- Vue封装全局防抖节流函数 2023-10-08
- npm start a http server( 在windows的任意目录上开启一个http server 用来测试html 页面和js代码,不用放到nginx的webroot目录下!!) 2023-10-25
- 活到老学到老学习AJAX跨域(三) 2022-12-15
- Jquery中$.ajax()方法参数详解 2022-10-17
- JS实现获取剪贴板内容的方法 2023-12-01