javascript
// script.js// 获取用户当前位置
navigator.geolocation.getCurrentPosition(function(position) {const lat = position.coords.latitude;const lng = position.coords.longitude;// 创建地图const map = new google.maps.Map(document.getElementById('map'), {center: { lat, lng },zoom: 15});// 创建标记const marker = new google.maps.Marker({position: { lat, lng },map: map});// 获取维修点数据fetch('repair-shops.json').then(response => response.json()).then(data => {// 过滤出离用户最近的维修点const watchResults = data.watch.sort((a, b) => {const distA = distance(lat, lng, a.lat, a.lng);const distB = distance(lat, lng, b.lat, b.lng);return distA - distB;});const bikeResults = data.bike.sort((a, b) => {const distA = distance(lat, lng, a.lat, a.lng);const distB = distance(lat, lng, b.lat, b.lng);returndistA - distB;});// 在结果列表中显示维修点const watchList = document.getElementById('watch-results');watchResults.forEach(shop => {const li = document.createElement('li');const name = document.createElement('span');const distance = document.createElement('span');name.innerHTML = shop.name;distance.innerHTML = `${(distance(lat, lng, shop.lat, shop.lng) / 1000).toFixed(2)} 公里`;li.appendChild(name);li.appendChild(distance);watchList.appendChild(li);});const bikeList = document.getElementById('bike-results');bikeResults.forEach(shop => {const li = document.createElement('li');const name = document.createElement('span');const distance = document.createElement('span');name.innerHTML = shop.name;distance.innerHTML = `${(distance(lat, lng, shop.lat, shop.lng) / 1000).toFixed(2)} 公里`;li.appendChild(name);li.appendChild(distance);bikeList.appendChild(li);});});
});// 计算两个坐标之间的距离(单位:米)
function distance(lat1, lng1, lat2, lng2) {const R = 6371; // 地球半径(单位:千米)const dLat = (lat2 - lat1) Math.PI / 180;const dLon = (lng2 - lng1) Math.PI / 180;const a = Math.sin(dLat / 2) Math.sin(dLat / 2) +Math.cos(lat1 Math.PI / 180) Math.cos(lat2 Math.PI / 180) Math.sin(dLon / 2) Math.sin(dLon / 2);const c = 2 Math.atan2(Math.sqrt(a), Math.sqrt(1-a));return R c 1000;
}