javascript - 由于bounds.extend方法导致递归错误太多

标签 javascript google-maps google-maps-api-3 google-maps-markers

我正在尝试创建绑定(bind)并缩放到我的标记。但我有我在行中提到的错误:

bounds.extend(markers[i].position);

当我在for循环中设置markers.length的长度时,它会给出太多递归错误
我显示了所有标记,但它们没有缩放和限制,并且我也遇到了我刚才提到的错误。

我执行此操作的代码是:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <style>
        #map-canvas {
            width: 1350px;
            height: 600px;
        }
    </style>
    <script type="text/javascript" src="http://code.jquery.com/jquery-2.1.3.js"></script>
    <script src="http://maps.google.com/maps/api/js?sensor=false"></script>
    <script>
        function initialize() {
            //var markers = new Array();
            var markers = [];
            $.ajax({
                type: 'GET',
                url: './Content/TextFile/LongLat.txt',
                //filereader\filereader\Content\TextFile\LongLat.txt
                //  url: './distinctGimeiNo.txt',
                dataType: 'text',
            }).success(function (data) {
                var infowindow = new google.maps.InfoWindow();

                var marker;
                var s2 = data.replace(/^.*$/, " ").replace(/\r\n/g, " ");
                var array = s2.split(/[ ]+/g);
                var test = [].concat.apply([], array.map(function (array) { return array.split(/\s+/); }))

                var col1 = [];
                var col2 = [];
                var col3 = [];
                var j = 0;
                // var currentLocation =
                var mapOptions =
                    {
                        zoom: 2,
                        center: new google.maps.LatLng(73, 23),
                        mapTypeId: google.maps.MapTypeId.ROADMAP
                    }
                var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
                for (var i = 0; i <= test.length - 3; i = i + 3) {
                    col1[j] = test[i];
                    col2[j] = test[i + 1];
                    col3[j] = test[i + 2];
                    var myLatlng = new google.maps.LatLng(col3[j], col2[j]);
                    marker = new google.maps.Marker(
                       {
                           position: myLatlng,
                           map: map,
                           title: 'Hello World! ' + col1[j]
                       });
                    markers.push(marker);
                    console.log("test2");
                    j++;
                }
                function AutoCenter() {
                    var bounds = new google.maps.LatLngBounds();
                    for (var i = 0; i < markers.length; i++) {
                        bounds.extend(markers[i].position);
                    }
                    map.fitBounds(bounds);
                }
                AutoCenter();
            })
        }
        google.maps.event.addDomListener(window, 'load', initialize);
        console.log("Check finished2");
    </script>    
</head>
<body>
    <div id="map-canvas"></div>
</body>
</html>

有人可以告诉我问题的解决方案吗?

最佳答案

您的第一组坐标无效。当您将无效坐标放入 google.map.LatLngBounds 时,结果将无法用于配置 map (它会生成您报告递归过多的错误)。

数据的第一行(取自 this question )不包含数字。

如果我跳过第一个条目,它对我有用:

    for (var i = 3; i <= test.length - 3; i = i + 3) {
        col1[j] = test[i];
        col2[j] = test[i + 1];
        col3[j] = test[i + 2];
        var myLatlng = new google.maps.LatLng(col3[j], col2[j]);
        marker = new google.maps.Marker({
            position: myLatlng,
            map: map,
            title: 'Hello World! ' + col1[j]
        });
        markers.push(marker);
        console.log("test2"+marker.getPosition().toUrlValue(6));
        j++;
    }

proof of concept fiddle

工作代码片段:

function initialize() {
  //var markers = new Array();
  var markers = [];
  /*    $.ajax({
          type: 'GET',
          url: './Content/TextFile/LongLat.txt',
          //filereader\filereader\Content\TextFile\LongLat.txt
          //  url: './distinctGimeiNo.txt',
          dataType: 'text',
      }).success(function (data) {
  */
  var infowindow = new google.maps.InfoWindow();

  var marker;
  /*        var s2 = data.replace(/^.*$/, " ").replace(/\r\n/g, " ");
          var array = s2.split(/[ ]+/g);
          var test = [].concat.apply([], array.map(function (array) {
              return array.split(/\s+/);
          }))
  */
  // from https://stackoverflow.com/questions/29160608/how-to-replace-space-with
  var rows = ["ID LONGITUDE LATITUDE", "0 77.139305 28.795975", "2 77.308929 28.486877", "4 73.820680 18.464110"];
  var test = [].concat.apply([], rows.map(function(row) {
    return row.split(' ');
  }))

  var col1 = [];
  var col2 = [];
  var col3 = [];
  var j = 0;
  // var currentLocation =
  var mapOptions = {
    zoom: 2,
    center: new google.maps.LatLng(73, 23),
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }
  var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
  for (var i = 3; i <= test.length - 3; i = i + 3) {
    col1[j] = test[i];
    col2[j] = test[i + 1];
    col3[j] = test[i + 2];
    var myLatlng = new google.maps.LatLng(col3[j], col2[j]);
    marker = new google.maps.Marker({
      position: myLatlng,
      map: map,
      title: 'Hello World! ' + col1[j]
    });
    markers.push(marker);
    console.log("test2:" + marker.getPosition().toUrlValue(6));
    j++;
  }

  function AutoCenter() {
    var bounds = new google.maps.LatLngBounds();
    for (var i = 0; i < markers.length; i++) {
      bounds.extend(markers[i].getPosition());
    }
    map.fitBounds(bounds);
  }
  AutoCenter();
  //    })
}
google.maps.event.addDomListener(window, 'load', initialize);
console.log("Check finished2");
html,
body,
#map-canvas {
  width: 100%;
  height: 100%;
}
<script src="https://maps.googleapis.com/maps/api/js"></script>
<div id="map-canvas"></div>

关于javascript - 由于bounds.extend方法导致递归错误太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29165386/

相关文章:

javascript - 我是否应该将函数从 Controller 移至服务,但为了单元测试而必须使用 rootScope 而不是作用域?

javascript - 数据表 - td 附加属性

javascript - 将 ember-view 渲染到定义的容器中

jquery - 将变量从 Google map 传递到 jQuery

javascript - 更改 Google map 地面叠加层中的图像

javascript - Chrome 中可点击的圆形 Canvas Angular

android - 如何在 Android 的谷歌地图上显示波纹动画?

javascript - 移动谷歌地图的中心(错误: Cannot read property 'fromLatLngToContainerPixel' of undefined)

javascript - Google map V3 -> 是否可以使用 lat lng 坐标或搜索框中的其他信息从 Geojson 获取属性?

android - Jquery 手机 : touch event slower in Android than in iOS