Tính khoảng cách mongodb

Tôi cần tính tổng khoảng cách di chuyển giữa một tập hợp các điểm. Tất cả chúng đều có dấu thời gian để sắp xếp chúng theo đúng thứ tự. Tôi chỉ được phép sử dụng MongoDB

Bộ sưu tập mẫu

{
    "_id" : ObjectId("596cd354241aa3174056fb98"),
    "spelerID" : 1,
    "timestamp" : ISODate("2017-02-01T19:00:00.000Z"),
    "coordinates" : {
        "type" : "Point",
        "coordinates" : [ 
            4.29870386367084, 
            50.8357637566422
        ]
    }
}

/* 2 */
{
    "_id" : ObjectId("596cd354241aa3174056fbb4"),
    "spelerID" : 1,
    "timestamp" : ISODate("2017-02-01T19:00:01.000Z"),
    "coordinates" : {
        "type" : "Point",
        "coordinates" : [ 
            4.29868458167181, 
            50.8357575419868
        ]
    }
}

/* 3 */
{
    "_id" : ObjectId("596cd354241aa3174056fbce"),
    "spelerID" : 1,
    "timestamp" : ISODate("2017-02-01T19:00:02.000Z"),
    "coordinates" : {
        "type" : "Point",
        "coordinates" : [ 
            4.29867536067721, 
            50.8357376028214
        ]
    }
}

Tôi không biết làm thế nào để tính khoảng cách giữa các điểm đó theo đúng thứ tự

- stackoverflow. com

ghi bàn. 0

MongoDB có thể thực hiện khoảng cách giữa hai điểm bằng cách sử dụng $near hoặc $geoNear

Trả về tài liệu theo thứ tự gần với một điểm cụ thể, từ gần nhất đến xa nhất. geoNear yêu cầu chỉ mục không gian địa lý. https. // tài liệu. mongodb. com/manual/reference/command/geoNear/

Trong trường hợp của bạn, tôi không nghĩ rằng điều này sẽ giải quyết được vấn đề vì bạn muốn thực hiện nhiều phép tính khoảng cách giữa nhiều điểm

MongoDB có thể được hướng dẫn để tạo thuật toán rất phức tạp bằng cách sử dụng MapReduce. Ngay cả khi tôi không phải là chuyên gia về ứng dụng GIS, bạn có thể thử tạo thói quen MapReduce với Hàm tính toán khoảng cách giữa nhiều điểm được sắp xếp theo ý muốn

MongoDB - MapReduce

Liên kết này có thể giúp bạn viết một hàm JS sẽ được sử dụng trong Map Giảm. Tính khoảng cách giữa hai điểm có vĩ độ?

Làm cách nào để tính khoảng cách tuyến đường giữa nhiều điểm GeoJSON trong MongoDB?

Dưới đây là một số ví dụ về dữ liệu của tôi

{ 
 _id: 599cfc236ed0d81c98007f66
 tracerId: 59a07ea26ed0d81d78001acd
 loc { 
      type: "2dsphere",
      coordinates: [ 159.9, -37.92 ]
     },
 date: 2017-08-26 00:16:42,
 speed: 58,
}
{ 
 _id: 59a074d46ed0d81d78001acc
 tracerId: 59a07ea26ed0d81d78001acd
 loc { 
      type: "2dsphere",
      coordinates: [ 160, -38.20 ]
     },
 date: 2017-08-26 00:18:42,
 speed: 75,
}
{ 
 _id: 59a074d46ed0d81d78ac11cc
 tracerId: 59a07ea26ed0d81d78001acd
 loc { 
      type: "2dsphere",
      coordinates: [ 160.222, -38.92 ]
     },
 date: 2017-08-26 00:20:42,
 speed: 60,
}
- stackoverflow. com

ghi bàn. 2

câu trả lời được chấp nhận

Như đã chỉ ra trong các nhận xét, sẽ cố gắng vẽ một bức tranh tương tự ở đây bằng Java. Giả sử tên cơ sở dữ liệu của bạn là db và tên bộ sưu tập là col và loại tài liệu là GeoData có thể được mô hình hóa thành

Nếu bạn đang tạo một ứng dụng cho phép người dùng sắp xếp/hiển thị dữ liệu theo vị trí gần nhất của họ, thì hướng dẫn này có thể giúp ích cho bạn

Đây là một triển khai cơ bản của việc sử dụng chức năng “sắp xếp theo khoảng cách”. chúng tôi sẽ sử dụng MongoDB cho việc này

Bước 1

MongoDB cung cấp chức năng tìm kiếm định vị theo mặc định. bạn chỉ cần thực hiện điều này

Schema mẫu cho ứng dụng Nhà hàng

{
restaurant_name: String,
phone: Number,
address: String,
location: {
type: { type: String },
coordinates: [Number],
},

}

Xem đối tượng vị trí ở trên, MongoDB Geolocation cần lấy dữ liệu bằng cách sử dụng tọa độ. Ở đây, loại là một chuỗi và sẽ chứa Điểm và mảng tọa độ chứa Kinh độ và Vĩ độ, vì vậy một tài liệu mẫu có thể như thế này

{
id:2,
restaurant_name: "Jaipur Tea Stall",
phone: 87988678XX,
address: "Near hawamahal, Jaipur, Rajasthan ",
location: {
type: "Point",
coordinates: [75.778885,26.922070],
},
}

Bây giờ, chúng tôi sẽ tạo một Chỉ mục để thực hiện công việc này. Định vị địa lý MongoDB yêu cầu một bộ sưu tập chỉ có tối đa một chỉ mục 2dsphere, vì vậy hãy tạo một chỉ mục trên đối tượng vị trí

db.collection.createIndex( { "location" : "2dsphere" } )
Bước 2

Bây giờ chúng ta sẽ tạo route trong NodeJS và MongoDB Query để lấy kết quả gần nhất theo vị trí người dùng. Tôi đang sử dụng tổng hợp

{ 
 _id: 599cfc236ed0d81c98007f66
 tracerId: 59a07ea26ed0d81d78001acd
 loc { 
      type: "2dsphere",
      coordinates: [ 159.9, -37.92 ]
     },
 date: 2017-08-26 00:16:42,
 speed: 58,
}
{ 
 _id: 59a074d46ed0d81d78001acc
 tracerId: 59a07ea26ed0d81d78001acd
 loc { 
      type: "2dsphere",
      coordinates: [ 160, -38.20 ]
     },
 date: 2017-08-26 00:18:42,
 speed: 75,
}
{ 
 _id: 59a074d46ed0d81d78ac11cc
 tracerId: 59a07ea26ed0d81d78001acd
 loc { 
      type: "2dsphere",
      coordinates: [ 160.222, -38.92 ]
     },
 date: 2017-08-26 00:20:42,
 speed: 60,
}
0 cho việc này

app.get('/search',(req, res, next)=>{
const long=req.query.long;
const lat=req.query.lat;
Restaurants.aggregate([
{
$geoNear: {
near: {
type: "Point",
coordinates: [ long , lat]
},
distanceField: "dist.calculated",
maxDistance: 2,
spherical: true
}
}
],(err,data)=>{
if(err) {
next(err);
return;
}
res.send(data);
})
});

gần- Điểm tìm tài liệu gần nhất.
distanceField - Trường này chứa khoảng cách được tính toán giữa các tọa độ.
maxDistance - Nó sẽ giới hạn các tài liệu trong khoảng cách. ( tính bằng mét)
hình cầu - MongoDB sử dụng hình học hình cầu để tính khoảng cách tính bằng mét

bây giờ, bạn có thể xem đầu ra ở đây, nó sẽ hiển thị các tài liệu gần nhất. chúng tôi cũng có một trường mới dist, hiển thị khoảng cách được tính toán