【问题标题】:How can I add markers to Google Maps using Node.js/Express/MongoDB?如何使用 Node.js/Express/MongoDB 向 Google 地图添加标记?
【发布时间】:2013-08-07 22:30:36
【问题描述】:

这周我决定要学习 Node.js(我不是程序员)。到目前为止,我一直玩得很开心,但我现在被困住了。

我使用 Express 创建了一个基本应用程序。假设我有一条路线/位置。我设置了获取请求以呈现相关视图并查找(使用 Mongoose 的 .find 方法)我的位置模型中的所有文档。我知道我可以像这样将文档传递给视图:

app.get('/locations', function(req, res) {
    Location.find({}, function(err, docs) {
        res.render('locations/index', {
            title: 'Locations',
            user: req.user,
            docs: docs  
        });
   });
});

然后,例如,我可以访问 (Jade) 视图中的结果并通过执行以下操作列出它们:

if(docs.length)
    each location in docs
        p #{location.name} is at #{location.coordinates}

我想将所有这些位置(使用与每个“位置”一起存储的坐标)添加到 Google 地图中。我有一个示例地图显示在视图上,使用头部中的以下脚本,取自 Google Maps API 文档。

function initialize() {
    var myLatlng = new google.maps.LatLng(-25.363882,131.044922);
    var mapOptions = {
        zoom: 4,
        center: myLatlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
    }
    var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
    var marker = new google.maps.Marker({
        position: myLatlng,
        title: "Hello World!"
    });
    marker.setMap(map);
}
google.maps.event.addDomListener(window, 'load', initialize);

我想出了在哪里创建标记变量然后设置我可以遍历我的“文档”并为存储在我的数据库中的每个位置创建和设置一个标记。也就是说,我对此太陌生,我似乎无法弄清楚如何去做,因为头部的脚本无法访问我传递给视图的“文档”。

有什么建议吗?提前感谢,非常感谢。

【问题讨论】:

    标签: node.js google-maps-api-3 express mongoose


    【解决方案1】:

    JSON.stringify() 我的客户端脚本需要的任何对象并将其作为 HTML5 data-whatever 属性插入。

    例如:

    //app.js
    app.get('/map', function(req, res){
      var data = {
        id: '1234',
        LL: {
          lat: 42.1,
          lng: 80.8,
      };
      res.locals.docsJSON = JSON.stringify([data]);
      res.render('locations/index');
    });
    
    //jade
    !!!
    html
      body(data-locations=locals.docsJSON)
      script
        var docs = JSON.parse($('body').attr('data-locations'));
        console.log(docs[0].LL);
    

    【讨论】:

    • 感谢您的建议,非常感谢。抱歉花了这么长时间才回来接受,但至少现在已经完成了。我使用了您的想法并将位置附加到包含地图的 div 上的数据属性中。一旦我遍历数据并为每个位置创建了一个图钉,我就删除了数据属性。那里没有任何敏感的东西,但它更干净一些,而且我仍然在视图上有位置,但是在我在渲染地图之前创建的数组中。再次感谢!
    • 太棒了!很高兴为您提供帮助!
    • @Plato 如何在地图上添加多个标记?我需要 AJAX 吗?我使用的是 HTML/EJS 而不是玉。
    • @AbhishekDe 要在浏览器中操作地图,您需要以某种方式将数据数组获取到客户端 javascript。这个答案只是将数组从服务器传输到客户端 js 的一个示例。一旦你有了数组,就像在 OP 的帖子中一样,一一创建和添加标记
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 2017-05-15
    • 2014-08-24
    • 2015-12-23
    • 1970-01-01
    相关资源
    最近更新 更多