我正在为客户构建谷歌地图,他们希望能够搜索我已经添加到地图中的标记。
我已经构建了 V3 API 映射,该映射从 MySQL 表中获取标记并将它们推送到标记数组中,但我正在努力设置一个搜索框来列出与搜索查询匹配的任何匹配项。
有人有这方面的经验或能够帮助我吗?
我正在为客户构建谷歌地图,他们希望能够搜索我已经添加到地图中的标记。
我已经构建了 V3 API 映射,该映射从 MySQL 表中获取标记并将它们推送到标记数组中,但我正在努力设置一个搜索框来列出与搜索查询匹配的任何匹配项。
有人有这方面的经验或能够帮助我吗?
通过维护自己的从数据库中提取的引脚数据集并在自己的代码中处理它们的搜索,您会得到最好的服务。要实施,您需要保存对您为该数据集中的每个位置创建的引脚的引用。因此,从数据库中获取位置,在本地保存,将它们添加到地图中,使用对创建的 pin 的引用更新本地数据存储,然后将您的搜索连接到您的数据集,最后居中或您希望在地图 pin 上发生的任何事情您为该结果保存的参考。
这个谷歌演练很好地概述了这种类型的解决方案。 https://developers.google.com/maps/articles/phpsqlsearch_v3?csw=1#creating-the-table
我认为您需要访问以下链接
https://developers.google.com/maps/documentation/javascript/places#place_search_requests
对于 node.js 后端服务器,如果您已经将数据注册到数据库中,这里是查找元素的解决方案。
首先,我们为带有后缀 /query 的 URL 创建了一个新的 POST 请求处理程序。此处理程序需要一个 JSON 或 mysql 数据库请求正文的数组,它指定三个参数:纬度、经度和距离。然后将这些参数转换并作为变量存储在处理程序中。
然后,我们使用查询生成器格式创建了一个通用的 Mongoose 查询。这种格式首先建立一个通用查询对象,该对象等于我们数据库中所有用户的未过滤搜索。
如果提供了距离,则查询构建器将添加一个新的搜索条件,该条件过滤掉落在查询坐标(纬度、经度)提供的距离内的所有用户。*
*这里我们还可以使用 MongoDB 搜索参数 $near 及其关联属性 maxDistance 和spherical 来指定我们要覆盖的范围。我们将查询主体的距离乘以 1609.34,因为我们希望获取用户的输入(以英里为单位)并将其转换为 MongoDB 期望的单位(以米为单位)。(对于 mongoDB 用户)
最后,我们指定应该在假设球面的情况下确定距离。这很重要,因为我们将评估全球的距离,而不是平坦的欧几里得表面。
最后,我们使用 query.exec 来指示 Mongoose 运行最终查询。如果查询没有遇到错误,它将提供符合条件的所有用户的 JSON 输出。
// 获取满足某组查询条件的所有用户的 JSON 或数组记录 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;
// Opens a generic Mongoose Query. Depending on the post body we will...
var query = User.find({});
// ...include filter by Max Distance (converting miles to meters)
if(distance){
// (optional)Using MongoDB's geospatial querying features. (Note how coordinates are set [long, lat]
query = query.where('location').near({ center: {type: 'Point', coordinates: [long, lat]}, OR Your own query to be specified here.
// Converting meters to miles(For mongoDB users). Specifying spherical geometry (for globe)
maxDistance: distance * 1609.34, spherical: true});
}
// ... Other queries will go here ...
// Execute Query and Return the Query Results
query.exec(function(err, users){
if(err)
res.send(err);
// If no errors, respond with a JSON of all users that meet the criteria or you can also enter the array number you want to pass.
res.json(users);
});
});
您还可以阅读有关geojson的信息或使用 MEAN 堆栈参考此 Google Map 项目。