一、使用HTML5新增的Geolocation API定位
Geolocation API是HTML5提供的一个定位API,可以使用JavaScript在网站上获取用户的地理位置。在寻找隐藏的朋友中,我们可以通过Geolocation API定位用户的位置,并进一步找到附近的好友。
if (navigator.geolocation) { navigator.geolocation.getCurrentPosition( function (position) { // 获取用户位置成功 const lat = position.coords.latitude; const lng = position.coords.longitude; // ... }, function (error) { // 获取用户位置失败,处理异常 } ); } else { // 浏览器不支持Geolocation API,处理异常 }
二、使用AJAX向服务器查询附近好友
在用户位置定位成功后,我们需要向服务器查询附近的好友。可以使用AJAX技术向服务器发送请求,并获取服务器返回的JSON格式的数据。在获取到数据后,可以使用JavaScript动态创建DOM元素,展示查询到的好友信息。
const xhr = new XMLHttpRequest(); xhr.open('GET', '/friend/nearby?lat=xxx&lng=xxx'); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if (xhr.status === 200) { const data = JSON.parse(xhr.responseText); for (let friend of data.friends) { // 动态创建DOM元素展示好友信息 } } else { // 处理错误 } } }; xhr.send(null);
三、优化查询效率
在查询附近好友时,可以对查询结果进行过滤,并限定查询的范围,从而提高查询效率。例如,可以只查询经纬度差值小于一定数值的好友,并且限定查询范围在一定的距离以内。
// 经纬度差值小于0.2 const latDelta = 0.2; const lngDelta = 0.2; // 限定查询范围在10km以内 const maxDistance = 10000; const result = []; for (let friend of friends) { const latDiff = Math.abs(friend.lat - myLat); const lngDiff = Math.abs(friend.lng - myLng); const distance = getDistance(friend.lat, friend.lng, myLat, myLng) if (latDiff <= latDelta && lngDiff <= lngDelta && distance <= maxDistance) { result.push(friend); } }
四、使用百度地图API展示位置
在查询到好友位置后,可以使用百度地图API展示查询到的好友位置信息。可以使用JavaScript动态创建百度地图,并在地图上添加标记,标记好友位置。
const map = new BMap.Map("map-container"); // 创建地图实例 map.centerAndZoom(new BMap.Point(myLng, myLat), 11); // 初始化地图,设置中心点坐标和地图级别 for (let friend of friends) { const point = new BMap.Point(friend.lng, friend.lat); // 创建标注点坐标 const marker = new BMap.Marker(point); // 创建标注并添加到地图中 map.addOverlay(marker); }