本文目录导读:

在浏览器中获取用户位置,或在服务器端通过IP获取位置,下面分别介绍,并附上可直接运行的脚本示例。
前端浏览器获取(HTML5 Geolocation)
这是最常用的方法,需要用户授权,精度高(GPS/基站/WiFi)。
原生 JavaScript 脚本
<!DOCTYPE html>
<html>
<body>
<button onclick="getLocation()">获取我的位置</button>
<p id="demo"></p>
<script>
function getLocation() {
if (navigator.geolocation) {
// 核心API,第三个参数是配置项
navigator.geolocation.getCurrentPosition(showPosition, showError, {
enableHighAccuracy: true, // 高精度,定位更准但更耗电
timeout: 5000, // 超时时间(毫秒)
maximumAge: 0 // 不缓存旧位置
});
} else {
document.getElementById("demo").innerHTML = "浏览器不支持地理定位";
}
}
// 成功回调
function showPosition(position) {
const lat = position.coords.latitude;
const lon = position.coords.longitude;
document.getElementById("demo").innerHTML =
`纬度: ${lat}, 经度: ${lon}`;
// 可选:反向地理编码(需要额外API)
// fetch(`https://api.map.baidu.com/reverse_geocoding/v3/?ak=你的密钥&location=${lat},${lon}&output=json`)
}
// 失败回调
function showError(error) {
switch(error.code) {
case error.PERMISSION_DENIED:
alert("用户拒绝授权");
break;
case error.POSITION_UNAVAILABLE:
alert("位置信息不可用");
break;
case error.TIMEOUT:
alert("请求超时");
break;
default:
alert("未知错误");
}
}
</script>
</body>
</html>
一行命令调用(Node.js 环境需借助包,浏览器环境直接执行)
注意:浏览器中无法用
curl,但可以在控制台执行:navigator.geolocation.getCurrentPosition(console.log)
后端根据 IP 获取地理位置(无需用户授权)
适用于任何有外网 IP 的环境,精度到城市级别。
Python 脚本(使用免费IP库)
import requests
import json
def get_location_by_ip(ip=None):
# ip为空则获取本机公网IP
if not ip:
# 使用这个API获取公网IP
ip = requests.get('https://api.ipify.org').text
# 免费IP定位API(无需密钥)
url = f'http://ip-api.com/json/{ip}?lang=zh-CN'
try:
response = requests.get(url, timeout=5)
data = response.json()
if data['status'] == 'success':
return {
'IP': data['query'],
'国家': data['country'],
'省份': data['regionName'],
'城市': data['city'],
'经纬度': [data['lat'], data['lon']],
'运营商': data.get('isp', '未知')
}
else:
return {'error': '查询失败'}
except Exception as e:
return {'error': str(e)}
# 使用示例
if __name__ == '__main__':
# 获取本机位置
result = get_location_by_ip()
print(json.dumps(result, ensure_ascii=False, indent=2))
# 或指定IP查询
# print(get_location_by_ip('8.8.8.8'))
Python 脚本(使用高德开放平台,更准确)
需要先去高德开放平台注册获取 key(免费配额够用),
import requests
def get_location_by_ip_amap(ip, key='你的高德KEY'):
url = 'https://restapi.amap.com/v3/ip'
params = {
'key': key,
'ip': ip
}
response = requests.get(url, params=params)
data = response.json()
if data['status'] == '1':
return {
'省份': data.get('province'),
'城市': data.get('city'),
'区域': data.get('adcode'),
'矩形范围': data.get('rectangle')
}
else:
return {'error': data.get('info')}
# 查询本机公网IP的位置
# print(get_location_by_ip_amap('本机公网IP', '你的KEY'))
纯 Bash 脚本(Linux/Mac 可用)
#!/bin/bash
# 获取本机IP(几种方式任选)
# IP=$(curl -s ifconfig.me)
IP=$(curl -s https://api.ipify.org)
echo "你的公网IP: $IP"
# 查询位置(使用 ip-api 免费接口)
curl -s "http://ip-api.com/json/${IP}?lang=zh-CN" | python3 -m json.tool
# 如果不装Python,用 jq 解析(Mac需 brew install jq)
# curl -s "http://ip-api.com/json/${IP}?lang=zh-CN" | jq '{country, regionName, city, lat, lon}'
常见问题与注意事项
| 问题 | 解决方案 |
|---|---|
| 浏览器拒绝授权 | 必须通过HTTPS才能调用定位API;或引导用户设置浏览器隐私允许定位 |
| 免费IP库不准确 | 使用高德/百度地图API,但需要注册开发者 |
| 局域网IP无法定位 | ip-api 只能查公网IP,局域网会返回“country: 局域网” |
| Node.js 环境 | 不能直接用navigator,需安装 node-geocoder 或 axios 配合IP库 |
更进阶:Node.js 一键执行(只需安装一个库)
npm install axios -g
node -e "
const axios = require('axios');
(async () => {
const ip = (await axios.get('https://api.ipify.org')).data;
const res = await axios.get('http://ip-api.com/json/' + ip + '?lang=zh-CN');
console.log('你的位置:', res.data.country, res.data.regionName, res.data.city);
})();
"
选择哪种方式取决于你的场景:用户设备位置用 navigator.geolocation;服务器IP位置用 IP 查询库,如果有更具体的需求(比如需要获取浏览器设备的具体联系方式或精确到街道),可以告诉我,我再帮你定制脚本。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播