我正在为客户构建谷歌地图,他们希望能够搜索我已经添加到地图上的标记。
我已经建立了V3 API地图,从MySQL表中获取标记并将它们推入标记数组,但我无法设置一个搜索框来列出与搜索查询匹配的任何结果。
有没有人有过这方面的经验或能够帮助我?
我正在为客户构建谷歌地图,他们希望能够搜索我已经添加到地图上的标记。
我已经建立了V3 API地图,从MySQL表中获取标记并将它们推入标记数组,但我无法设置一个搜索框来列出与搜索查询匹配的任何结果。
有没有人有过这方面的经验或能够帮助我?
对于一个node.js后端服务器,如果您已经将数据注册到数据库中,则可以使用以下解决方案查找元素。
首先,我们为具有后缀/query的URL创建了一个新的POST请求处理程序。该处理程序期望mysql数据库请求正文的JSON或数组,其中指定了三个参数:纬度、经度和距离。然后将这些参数转换并存储为处理程序中的变量。
然后,我们使用查询构建器格式创建了一个通用的Mongoose查询。该格式通过将通用查询对象与数据库中所有用户的未过滤搜索相等来开始。
如果提供了距离,则查询构建器将添加一个新的搜索条件,该条件过滤出所有落在查询坐标(纬度、经度)提供的距离范围内的用户。
*在此,我们还可以使用MongoDB搜索参数$near及其关联属性maxDistance和spherical来指定我们要覆盖的范围。我们将查询正文的距离乘以1609.34,因为我们希望将用户的输入(以英里为单位)转换为MongoDB期望的单位(以米为单位)。 (适用于mongoDB用户)
最后,我们指定距离应该是基于球面计算的。这很重要,因为我们将在全球范围内评估距离,而不是欧几里得平面。
最后,我们使用`query.exec`指示Mongoose运行最终的查询。如果查询没有遇到错误,它将提供符合条件的所有用户的JSON输出。
// 检索满足特定查询条件的所有用户的JSON或数组记录 app.post('/query/', function(req, res){
// 从请求体中获取所有查询参数。
var lat = req.body.latitude;
var long = req.body.longitude;
var distance = req.body.distance;
// 打开通用的Mongoose查询。根据post body,我们将...
var query = User.find({});
// ...包括按最大距离过滤(将英里转换为米)
if(distance){
// (可选)使用MongoDB的地理空间查询功能。(请注意,坐标设置为[long,lat])
query = query.where('location').near({ center: {type: 'Point', coordinates: [long, lat]}, OR Your own query to be specified here.
// 将米转换为英里(MongoDB用户使用)。指定球形几何(用于全球)
maxDistance: distance * 1609.34, spherical: true});
}
// ... 其他查询将放在这里 ...
// 执行查询并返回查询结果
query.exec(function(err, users){
if(err)
res.send(err);
// 如果没有错误,则回复符合条件的所有用户的JSON,或者您也可以输入要传递的数组编号。
res.json(users);
});
});
您也可以阅读有关geojson的内容,或者参考使用MEAN堆栈的此Google地图项目。