gpt4 book ai didi

javascript - 在给定坐标和最大距离的情况下查找到某个点的最近点 - 使用带有 MEAN 堆栈的 Mongoose 查询结果未定义

转载 作者:IT老高 更新时间:2023-10-28 13:10:40 25 4
gpt4 key购买 nike

我有一个问题在几天内都无法解决,即使查看相关的 Stack Overflow Q/A。

我正在开发一个重用 Scotch's Create a MEAN Stack Google Map App Tutorial by Ahmed Haque 的应用程序接近。

我正在尝试实现一个应用程序,该应用程序使用 Google Maps API 来绘制 PointsLineStringsPolygons 哪些坐标包含在 GeoJson 文件中,这些文件存储在 MongoDB 实例中。

我正在使用 Mongoose 为我的数据构建架构并查询我的 MongoDB 数据库。

I would like to find the closest Points CP to a certain Points P0 given P0's latitude and longitude and given a maximum radius distance used to find the interested points.

enter image description here

鉴于图像结束,我希望这样,例如,如果我插入 2000(公里),我的查询将找到距离 P0 最大 2000 公里的所有点。在这个例子中,它可能应该给我 P1 和 P2。

当我的 Mongoose Schema 中只有点时,我能够做到这一点。

我有这个只有标记(点)的 Schema:

// Pulls Mongoose dependency for creating schemas
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

// Creates a User Schema.
var MarkerSchema = new Schema({
username: {type: String, required: true},
location: {type: [Number], required: true}, // [Long, Lat]
created_at: {type: Date, default: Date.now},
updated_at: {type: Date, default: Date.now}
});

// Indexes this schema in 2dsphere format
MarkerSchema.index({location: '2dsphere'});

module.exports = mongoose.model('mean-markers', MarkerSchema);

这是我的仅针对标记的旧查询:

var User = require('./model.js');

app.post('/query/', function(req, res) {

// Grab all of the query parameters from the body.
var lat = req.body.latitude;
var long = req.body.longitude;
var distance = req.body.distance;
var reqVerified = req.body.reqVerified;

// Opens a generic Mongoose Query
var query = User.find({});

// ...include filter by Max Distance (converting miles to meters)
if (distance) {

// Using MongoDB's geospatial querying features
query = query.where('location').near({
center: {
type: 'Point',
coordinates: [long, lat]
},

// Converting meters to miles
maxDistance: distance * 1609.34,
spherical: true
});
}
});

效果非常好,我能够获得接近分数。

然后,我将 Schema 更改为更具动态性,并且还支持 Polylines 和 Polygons

我可以使用以下 Schema 插入和绘制新的点、折线和多边形:

var mongoose = require('mongoose');
var GeoJSON = require('geojson');
var Schema = mongoose.Schema;

// Creates a Location Schema.
var LocationSchema = new Schema({
name: {type: String, required: true},
location: {
type: {type : String, required: true},
coordinates : [Schema.Types.Mixed]
},
created_at: {type: Date, default: Date.now},
updated_at: {type: Date, default: Date.now}
});

LocationSchema.index({location: '2dsphere'});
module.exports = mongoose.model('mean-locations', LocationSchema);

这是我的 Mongoose 查询:

var GeoObjects = require('./model.js');

app.post('/query/', function(req, res) {

// Grab all of the query parameters from the body.
var lat = req.body.latitude;
var long = req.body.longitude;
var distance = req.body.distance;

var query;

if (distance) {
query = GeoObjects.find({'location.type':'Point'})
.where('location.coordinates').near({
center: {
type: 'Point',
coordinates: [lat, long]
},
// Converting meters to miles
maxDistance: distance * 1609.34,
spherical: true
});
}

// Execute Query and Return the Query Results
query.exec(function(err, users) {
if (err)
res.send(err);
console.log(users);
// If no errors, respond with a JSON of all users that meet the criteria
res.json(users);
});
});

console.log(users); 给我 undefined.

在我的 queryCtrl.js 中记录查询结果给我以下错误消息:

name:“MongoError”,消息:“错误处理查询:ns=MeanMapApp.mean-locatio...ed 错误:无法找到 $geoNear 查询的索引”,waitedMS:0,ok:0,errmsg: “错误处理查询:ns=MeanMapApp.mean-locatio...ed 错误:找不到 $geoNear 查询的索引”

相同但略有不同:

app.post('/query/', function(req, res) {

// Grab all of the query parameters from the body.
var lat = req.body.latitude;
var long = req.body.longitude;
var distance = req.body.distance;

console.log(lat,long,distance);

var points = GeoObjects.find({'location.type':'Point'});

var loc = parseFloat(points.location.coordinates);
console.log(JSON.stringify(loc));

if (distance) {
var query = points.near(loc, {
center: {
type: 'Point',
coordinates: [parseFloat(lat), parseFloat(long)]
},
// Converting meters to miles
maxDistance: distance * 1609.34,
spherical: true
});
}
});

这是一个标记示例:

{
"name": "user01",
"location": {
"type":"Point",
"coordinates": [102.0, 0.0]

}
}

$near 运算符如何处理距离和 maxDistance:

来自 Scotch's Making MEAN Apps with Google Maps (Part II) by Ahmed Haque

MongoDB search parameter $near and its associated properties maxDistance and spherical to specify the range we’re looking to cover. We’re multiplying the distance of our query body by 1609.34, because we want to take our users’ input (in miles) and convert it into the units MongoDB expects (in meters).

  1. 为什么我得到 undefined
  2. 这个问题有可能是我的 Schema 引起的吗?
  3. 我该如何解决这个问题?

如果您想获得一些澄清,请在下面发表评论。

提前致谢。

最佳答案

我不明白你所有的代码下面是什么,但我知道一件事:
如果您使用 Google 的雷达搜索,则必须考虑到

The maximum allowed radius is 50 000 meters.

看看他们的Documentation

这意味着如果您尝试使用更大的半径,结果可能为零

关于javascript - 在给定坐标和最大距离的情况下查找到某个点的最近点 - 使用带有 MEAN 堆栈的 Mongoose 查询结果未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37733030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com