如何使用节点模块和mongodb加载谷歌地图的标记位置?

时间:2014-06-10 10:37:08

标签: javascript node.js mongodb google-maps-api-3

我正在尝试学习如何使用Node.js从Mongodb加载Google地图标记的位置。我设法从数据库和console.log中检索位置。我在节点模块中定义了一个变量,所以我可以在我的谷歌地图脚本中直接引用它,我也尝试在这个问题中使用答案(How can I add markers to Google Maps using Node.js/Express/MongoDB?),但我不想让它们在在页面正文中,我想直接将变量用作标记在谷歌地图脚本中的位置,但地图不会显示任何内容。 这是我app.js中的代码

var data = require ("./public/assets/js/data.js");
app.get('/test', function(req, res){
console.log (data)
 res.render('ViewMode');
});

这是我的data.js文件:

var mongoose = require ('mongoose');
var data = new Array();
 mongoose.model('stories').find({},function(err, companies) {
        for (var i = 0; i < companies.length; i++) {
        data[i] = JSON.stringify(companies[i].location);

            }
 });
module.exports = data;

这是我的Google地图脚本:

<script src="assets/js/data.js"></script>

<script>

function initialize() {
    var myLatlng = new google.maps.LatLng(-25.363882,131.044922);
    var mapOptions = {
    center: new google.maps.LatLng(53.467216, -2.233701),
    disableDoubleClickZoom: true, 
    zoom: 15,
  };
    var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);

var markers = [];
    for (var i = 0; i < 100; i++) {
      var location = data[i];
      var latLng = new google.maps.LatLng(location);
      var marker = new google.maps.Marker({
        position: latLng
      });
      markers.push(marker);
    }
    var markerCluster = new MarkerClusterer(map, markers);
  }

google.maps.event.addDomListener(window, 'load', initialize);
</script>

如果你告诉我哪里做错了,我真的很感激。 感谢

1 个答案:

答案 0 :(得分:0)

因此,如果您的数据数组如下所示:

[ 
    '"(53.464111624815494, -2.2338683903217316)"', 
    '"(53.46692188087774, -2.2315509617328644)"', 
    '"(53.46413717343583, -2.2330529987812042)"', 
    '"(53.4639838814831, -2.235284596681595)"', 
    '"(53.464034978862195, -2.232538014650345)"', 
    '"(53.466385391816004, -2.2270019352436066)"' 
] 

然后每个位置实例看起来像(包括"个字符):

"(53.464111624815494, -2.2338683903217316)"

因此,您需要解析该字符串中的各个纬度和经度值。我尝试过类似的事情:

<script>
    var data = [ 
        '"(53.464111624815494, -2.2338683903217316)"', 
        '"(53.46692188087774, -2.2315509617328644)"', 
        '"(53.46413717343583, -2.2330529987812042)"', 
        '"(53.4639838814831, -2.235284596681595)"', 
        '"(53.464034978862195, -2.232538014650345)"', 
        '"(53.466385391816004, -2.2270019352436066)"' 
    ];

    for (var i = 0; i < data.length; i++) {
        var mylocation = data[i];

        var lat = mylocation.replace(/^\"\(([0-9-.]*),.*/g, "$1");
        var lng = mylocation.replace(/.*,\s*([0-9-.]*)\)\"$/g, "$1");
        var latLng = new google.maps.LatLng(lat, lng);
    }
</script>

注意:我也非常谨慎使用名为location的变量 - 这可能会导致混淆并可能与location object发生冲突。