javascript - 谷歌地图加载旧金山然后重新加载正确的位置

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

我使用以下函数异步加载 Google map ,如果下拉列表中选择的值发生变化, map 将刷新以居中,这一切都正常。

我遇到的问题是,每次加载页面或使用下拉列表中的值重新加载 map 时, map 都会先加载旧金山,然后在加载正确位置后一两秒加载,这是我的编码问题还是我对此能做些什么,我在网上查了一下,但在这个问题上找不到太多信息,这是 map 异步加载的问题吗?

非常感谢任何帮助。

function selectMapLocation(pLocationName)
{
    var map;

    if (pLocationName != "")
    {
        var geocoder = new google.maps.Geocoder();

        geocoder.geocode( { 'address' : pLocationName }, function(results, status) 
        {
            if (status == google.maps.GeocoderStatus.OK) 
            {
                map.setCenter(results[0].geometry.location);
            }
        });

        var mapOptions = {
            zoom: 10,
            center: new google.maps.LatLng(-34.397, 150.644)
        }
        map = new google.maps.Map(document.getElementById('map'), mapOptions);

        google.maps.event.addDomListener(window, 'load', initialize);
    }
    else
    {
        var mapOptions = {
            zoom: 8,
            center: new google.maps.LatLng(-34.397, 150.644)
        };

        google.maps.event.addListener(map, 'click', function(event){
            var marker = new google.maps.Marker({
                position: event.latLng, 
                map: map
            });
        });

        map = new google.maps.Map(document.getElementById('map'), mapOptions);
    }
}

最佳答案

最简单的修复方法是只有在知道将其初始化到何处后才初始化 map 。

function selectMapLocation(pLocationName) {
    var map;

    if (pLocationName != "") {
        var geocoder = new google.maps.Geocoder();

        geocoder.geocode({
            'address': pLocationName
        }, function (results, status) {
            if (status == google.maps.GeocoderStatus.OK) { // result of geocoder request
                var mapOptions = {
                    zoom: 10,
                    center: results[0].geometry.location
                }
                map = new google.maps.Map(document.getElementById('map'), mapOptions);
            } else { // default position 
                var mapOptions = {
                    zoom: 10,
                    center: new google.maps.LatLng(-34.397, 150.644)
                }
                map = new google.maps.Map(document.getElementById('map'), mapOptions);
            }
        });
        // google.maps.event.addDomListener(window, 'load', initialize);
    } else { // default position
        var mapOptions = {
            zoom: 8,
            center: new google.maps.LatLng(-34.397, 150.644)
        };

        google.maps.event.addListener(map, 'click', function (event) {
            var marker = new google.maps.Marker({
                position: event.latLng,
                map: map
            });
        });

        map = new google.maps.Map(document.getElementById('map'), mapOptions);
    }
}

working fiddle

工作代码片段:

function selectMapLocation(pLocationName) {
  var map;

  if (pLocationName != "") {
    var geocoder = new google.maps.Geocoder();

    geocoder.geocode({
      'address': pLocationName
    }, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        var mapOptions = {
          zoom: 10,
          center: results[0].geometry.location
        }
        map = new google.maps.Map(document.getElementById('map'), mapOptions);
      } else {
        var mapOptions = {
          zoom: 10,
          center: new google.maps.LatLng(-34.397, 150.644)
        }
        map = new google.maps.Map(document.getElementById('map'), mapOptions);
      }
    });
    // google.maps.event.addDomListener(window, 'load', initialize);
  } else {
    var mapOptions = {
      zoom: 8,
      center: new google.maps.LatLng(-34.397, 150.644)
    };

    google.maps.event.addListener(map, 'click', function(event) {
      var marker = new google.maps.Marker({
        position: event.latLng,
        map: map
      });
    });

    map = new google.maps.Map(document.getElementById('map'), mapOptions);
  }
}
html,
body,
#map {
  height: 500px;
  width: 500px;
  margin: 0px;
  padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js"></script>
<div id="map" style="width:750px; height:450px; border: 2px solid #3872ac;"></div>
<select onchange="selectMapLocation(this.value)">
  <option value="">---- select ----</option>>
  <option value="New York, NY">New York</option>
  <option value="Newark, NJ">Newark, NJ</option>
  <option value="Baltimore,MD">Baltimore, MD</option>
  <option value="Boston, MA">Boston, MA</option>
</select>

关于javascript - 谷歌地图加载旧金山然后重新加载正确的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27495931/

相关文章:

javascript - Google Maps API - map 未加载

javascript - 更新 parse.com 表时出现“POST 400 错误请求”错误

php - 在 Curl 请求 (PHP) 中禁用 Javascript

javascript - 高阶函数返回非 boolean 值以外的任何内容都是有问题的。为什么?

android - 我如何使用包含 MapView 并在其下方显示 AdMob View 的 TabHost 包装?

javascript - 无法将希伯来语编码为谷歌地图查询的网址

javascript - 谷歌地图 API : force map to do not handle click inside infobox

javascript - 如何更改我网站中的谷歌地图标记

javascript - 如何使用 JavaScript 获取 Google map 上两个形状之间的最短距离?

angularjs - 嵌套 ui-gmap-markers 指令