当前位置:首页 > JavaScript

Js实现附近订单

2026-02-02 18:40:18JavaScript

实现附近订单功能的方法

获取用户位置

使用浏览器提供的Geolocation API获取用户的当前位置坐标。代码示例如下:

navigator.geolocation.getCurrentPosition(
  (position) => {
    const { latitude, longitude } = position.coords;
    console.log(latitude, longitude);
  },
  (error) => {
    console.error(error);
  }
);

存储订单位置数据

订单数据需要包含经纬度信息。数据库结构可以设计为:

Js实现附近订单

{
  orderId: "123",
  location: {
    lat: 39.9042,
    lng: 116.4074
  },
  // 其他订单信息
}

计算距离

使用Haversine公式计算两点之间的距离(单位:公里):

function calculateDistance(lat1, lon1, lat2, lon2) {
  const R = 6371; // 地球半径(km)
  const dLat = (lat2 - lat1) * Math.PI / 180;
  const dLon = (lon2 - lon1) * 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;
}

筛选附近订单

获取用户位置后,筛选指定半径范围内的订单:

Js实现附近订单

function getNearbyOrders(userLat, userLng, orders, radiusKm) {
  return orders.filter(order => {
    const distance = calculateDistance(
      userLat, 
      userLng,
      order.location.lat,
      order.location.lng
    );
    return distance <= radiusKm;
  });
}

优化性能

对于大量订单数据,可以考虑以下优化:

  • 使用空间索引(如GeoHash)
  • 在数据库层面进行地理位置查询(MongoDB有$near操作符,MySQL有空间函数)
  • 实现分页加载避免一次性处理过多数据

前端展示

在地图上标记附近订单位置,可以使用地图API如Google Maps或Mapbox:

// 使用Mapbox示例
mapboxgl.accessToken = 'YOUR_ACCESS_TOKEN';
const map = new mapboxgl.Map({
  container: 'map',
  style: 'mapbox://styles/mapbox/streets-v11',
  center: [userLng, userLat],
  zoom: 12
});

nearbyOrders.forEach(order => {
  new mapboxgl.Marker()
    .setLngLat([order.location.lng, order.location.lat])
    .addTo(map);
});

标签: 订单附近
分享给朋友:

相关文章

点菜订单实现vue

点菜订单实现vue

实现点菜订单功能的Vue组件 创建基于Vue的点菜订单系统需要构建几个关键组件,包括菜单展示、购物车和订单提交功能。 菜单展示组件 使用v-for循环渲染菜品列表,每个菜品包含图片、名称、价格和加入…

vue实现商城订单页面

vue实现商城订单页面

Vue实现商城订单页面的关键步骤 搭建基础项目结构 使用Vue CLI创建项目,安装必要依赖(如vue-router、axios)。订单页面通常需要路由配置,在router/index.js中定义订单…

php实现订单

php实现订单

PHP实现订单系统 在PHP中实现订单系统需要考虑数据库设计、订单处理逻辑、用户界面交互等多个方面。以下是一个基本的实现方案: 数据库设计 创建订单相关的数据表结构: CREATE TABLE o…

js实现附近商家

js实现附近商家

实现附近商家功能的方法 获取用户地理位置 使用浏览器提供的Geolocation API获取用户的经纬度坐标。代码示例如下: navigator.geolocation.getCurrentPosi…

vue实现订单状态

vue实现订单状态

Vue 实现订单状态管理 在 Vue 中实现订单状态管理可以通过多种方式完成,包括使用组件状态、Vuex 或 Pinia 进行全局状态管理,以及结合后端 API 动态获取订单状态。以下是几种常见的实现…

php订单实现

php订单实现

PHP订单系统实现要点 数据库设计 创建订单表需包含订单ID、用户ID、商品信息、金额、状态、创建时间等字段。状态字段通常用枚举类型表示未支付、已支付、已发货等流程状态。 订单生成逻辑 用户提交购物…