谷歌地图API V3:搜索标记

16

我正在为客户构建谷歌地图,他们希望能够搜索我已经添加到地图上的标记。

我已经建立了V3 API地图,从MySQL表中获取标记并将它们推入标记数组,但我无法设置一个搜索框来列出与搜索查询匹配的任何结果。

有没有人有过这方面的经验或能够帮助我?


我也想找到一个解决方案 - 你有什么想法了吗? - tristanojbacon
有什么进展了吗?我也遇到了同样的问题。 - Sidd
还没有人回答这个问题吗? - Jordi Castilla
1
我也对答案感兴趣。 - Meglio
不要下投机代码。 - danny117
请您添加一些代码,这将有助于确定最佳解决方案。谢谢! - ZeroWorks
3个回答

1
你最好维护自己的针脚数据集,并在你自己的代码中处理它们的搜索。为了实现这一点,你需要保存每个位置的引用到该数据集中正在创建的针脚。因此,从数据库获取位置,本地保存,添加到地图上,使用引用更新本地数据存储,然后将搜索与数据集连接起来,最后根据地图针脚引用居中或执行任何你想要发生的操作。
这篇 Google 指南是这种类型解决方案的一个很好的概述。 https://developers.google.com/maps/articles/phpsqlsearch_v3?csw=1#creating-the-table

0

对于一个node.js后端服务器,如果您已经将数据注册到数据库中,则可以使用以下解决方案查找元素。

  1. 首先,我们为具有后缀/query的URL创建了一个新的POST请求处理程序。该处理程序期望mysql数据库请求正文的JSON或数组,其中指定了三个参数:纬度、经度和距离。然后将这些参数转换并存储为处理程序中的变量。

  2. 然后,我们使用查询构建器格式创建了一个通用的Mongoose查询。该格式通过将通用查询对象与数据库中所有用户的未过滤搜索相等来开始。

  3. 如果提供了距离,则查询构建器将添加一个新的搜索条件,该条件过滤出所有落在查询坐标(纬度、经度)提供的距离范围内的用户。

*在此,我们还可以使用MongoDB搜索参数$near及其关联属性maxDistance和spherical来指定我们要覆盖的范围。我们将查询正文的距离乘以1609.34,因为我们希望将用户的输入(以英里为单位)转换为MongoDB期望的单位(以米为单位)。 (适用于mongoDB用户)

  1. 最后,我们指定距离应该是基于球面计算的。这很重要,因为我们将在全球范围内评估距离,而不是欧几里得平面。

  2. 最后,我们使用`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地图项目。


0

6
问题与开发者添加到地图上的标记有关,而不是搜索来自Google的地点或POI。 - Tim Davies

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接