【问题标题】:Google Maps v3 API: use first user location to center the mapGoogle Maps v3 API:使用第一个用户位置使地图居中
【发布时间】:2015-06-28 18:45:14
【问题描述】:

我正在构建一个基于谷歌地图的网络应用程序,在该应用程序上绘制用户位置的移动点。我从服务器连续获取用户位置,并希望在加载地图时使用当前用户位置以围绕它的窗口居中,这意味着,当用户加载站点时,地图将以第一个纬度/经度为中心从服务器获取,但使用户能够在之后平移地图,而无需将其重新集中在用户所在的位置。我能够使地图始终以用户位置为中心,但无法弄清楚如何在初始化期间使用第一个获取的位置来使地图居中。我的代码如下,任何帮助将不胜感激。谢谢!

 <script>

          var locations = [
                ['location a', 37.771678, -122.469357],
                ['location b', 37.768557, -122.438458],
                ['location c', 37.755121, -122.438973],
                 ['location d', 37.786127, -122.433223]
              ];
          var map;
          var i;
          var marker; 
          var google_lat = 37.722066;
          var google_long = -122.478541;
          var myLatlng = new google.maps.LatLng(google_lat, google_long);
          var image_dot = new google.maps.MarkerImage(
              'images/red_dot.png',
              null, // size
              null, // origin
              new google.maps.Point( 8, 8 ), // anchor (move to center of marker)
              new google.maps.Size( 8, 8 ) // scaled size (required for Retina display icon)
          );

          function initialize() {

            var mapOptions = {
              zoom: 12,
              center: myLatlng,
              mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);

            setMarkers(map, locations);
          } //initialize();


          function setMarkers(map, locations) {

              for (var i = 0; i < locations.length; i++) {
              var beach = locations[i];
              var myLatLng1 = new google.maps.LatLng(beach[1], beach[2]);
              marker = new google.maps.Marker({
                position: myLatLng1,
                icon: image_dot,
                map: map
              });
            }
          }

          google.maps.event.addDomListener(window, 'load', initialize);

    </script>

    <script type="text/javascript">

            var Tdata;
             var image = new google.maps.MarkerImage(
              'images/bluedot_retina.png',
              null, // size
              null, // origin
              new google.maps.Point( 8, 8 ), // anchor (move to center of marker)
              new google.maps.Size( 17, 17 ) // scaled size (required for Retina display icon)
           );
            var userMarker = new google.maps.Marker({icon: image});

            $.ajax({
                    method : "GET",
                    url: "get_location.php",
                    success : function(data){
                        Tdata=JSON.parse(data);
                        myFunction();
                    }
            });

            function myFunction(){
                    var interval = setInterval(function() { 
                        $.get("get_location.php", function(Tdata) {
                            var JsonObject= JSON.parse(Tdata);
                            google_lat = JsonObject.lat;
                            google_long = JsonObject.long;
                            myLatlng = new google.maps.LatLng(google_lat, google_long);
                            userMarker.setPosition(myLatlng);
                            userMarker.setMap(map);
                            //map.setCenter(myLatlng); --> this is not what I want since it will always keep the map centerd around the user 
                        });
                    }, 1000);
            }

     </script>

【问题讨论】:

  • 为什么要投反对票?请解释一下。

标签: javascript ajax google-maps google-maps-api-3


【解决方案1】:

仅在第一次设置地图中心。第一次检测的一种方法是在第一次加载数据时创建“userMarker”。

var userMarker;

$.ajax({
  method : "GET",
  url: "get_location.php",
  success : function(data){
    Tdata=JSON.parse(data);
    myFunction();
  }
});

function myFunction(){
  var interval = setInterval(function() { 
    $.get("get_location.php", function(Tdata) {
      var JsonObject= JSON.parse(Tdata);
      google_lat = JsonObject.lat;
      google_long = JsonObject.long;
      myLatlng = new google.maps.LatLng(google_lat, google_long);
      if (!userMarker || !userMarker.setPosition) {
        // create the marker
        userMarker = new google.maps.Marker({
          icon: image, 
          position: myLatlng, 
          map:map
        });
        // center the map the first time, when the marker is created
        map.setCenter(myLatlng);
      } else { // marker aleady exists
        userMarker.setPosition(myLatlng);
      }
    });
  }, 1000);
}

proof of concept fiddle

【讨论】:

  • 谢谢,但由于某种原因,地图现在根本没有加载……而且没有明显的错误。
  • 更正:我得到:“未捕获的类型错误:无法读取未定义的属性 'setPosition'”,我认为它不会进入 if/else。
  • 抱歉,有几个错别字,现已更正。你没有提供Minimal, Complete, Tested and Readable example,所以我没有测试。
  • 非常感谢,这太棒了。
猜你喜欢
  • 2016-09-03
  • 2012-01-29
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
相关资源
最近更新 更多