当前位置:首页 > 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的响应式特性和组件化开发非常适合此类需求。 商品展示组件 使用v-for渲染商品列表,配合计算属性实现筛…

vue实现我的订单

vue实现我的订单

Vue实现我的订单功能 在Vue中实现"我的订单"功能,通常需要以下几个核心模块:订单列表展示、订单详情、订单状态管理以及数据交互。以下是一个完整的实现方案: 订单数据结构设计 订单数据通常从后端A…

php订单实现

php订单实现

PHP订单实现步骤 数据库设计 创建订单相关表,通常包括orders(订单主表)和order_items(订单商品明细表)。主表字段应包含订单ID、用户ID、总金额、支付状态、创建时间等;明细表需关联…

php订单系统实现

php订单系统实现

PHP订单系统实现 实现一个PHP订单系统需要涵盖数据库设计、前端交互、后端逻辑处理以及安全性保障。以下是关键步骤和代码示例: 数据库设计 创建订单系统所需的数据库表,通常包括用户表、产品表和订单表…

php实现订单批量发货

php实现订单批量发货

PHP 实现订单批量发货的方法 数据库查询与订单筛选 使用SQL查询获取待发货订单列表,根据状态字段(如status = '待发货')筛选符合条件的订单。建议结合分页查询避免数据量过大导致内存溢出。…

php订单实现

php订单实现

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