【问题标题】:google maps JavaScript issues谷歌地图 JavaScript 问题
【发布时间】:2023-12-13 14:19:01
【问题描述】:

首先感谢您抽出时间帮助我,感谢您的努力。

我在使用 google maps api,JavaScript 版本 3 时遇到问题。

我写了以下代码

    $('.adr').ready(function(){    

    initialize();

})

function initialize() {

    var myLatlng = codeAddress();

    var myOptions = {
      zoom: 14,
      center: myLatlng,
      mapTypeId: google.maps.MapTypeId.SATELLITE
    };

    var map = new google.maps.Map(document.getElementById("map_canvas"),myOptions);

  }

function codeAddress() 
{
    var geocoder = new google.maps.Geocoder();

    var address;
    var street = cropAdr($(".street-address").text());
    var city = cropAdr($(".locality").text());
    var state = cropAdr($(".region").text());
    var zip = cropAdr($(".zip").text()); 

    address = street + ", " + city + ", " + state + ", " + zip;    

    geocoder.geocode( {'address': address}, function(results, status) 
    {

      if (status == google.maps.GeocoderStatus.OK) 
      {
        var latlng = results[0].geometry.location;
        return latlng;
      }  
      else 
      {
        alert("Geocode was not successful for the following reason: " + status);        
        return null;
      }

    });
}



function cropAdr(args)
{
  var index = args.indexOf(":");
  var value = args.substr(index+1);

  return value;
}

但它不起作用。

我已经检查了“results[0].geometry.location”返回的值及其完美,所以地址操作有效。 “results[0].geometry.location”是一个 google.maps.Latlng 对象,但我试图将坐标剥离为字符串,然后创建一个新的 google.maps.Latlng 对象但没有骰子。

但是,如果我手动复制该字符串并将值粘贴到“var myLatlng = new google.maps.Latlng(Paste Copied String here!)”中,整个事情就可以了!!

我看不出这个脚本还有什么问题(对于 Jquery 和 Javascritpt 的混乱表示歉意)。

【问题讨论】:

    标签: javascript google-maps-api-3


    【解决方案1】:

    Google Maps API Geocoder 接受一个函数,该函数将在地址被地理编码后运行,但该函数可能会被异步调用 - 即在您的其余代码已经完成运行之后。

    在 codeAddress 中,您调用 Geocoder 并使用此行传入一个函数:

    geocoder.geocode( {'address': address}, function(results, status)
    

    然后您尝试从传递给地理编码器的函数返回一个 latLng,但这与从 codeAddress 返回一个值不同。你从这个函数内部返回的值将被传递给地理编码器对象,它会忽略它。

    你需要让你传递给地理编码的函数对 latLng 做一些事情。例如,替换:

    return latLng;
    

    与:

    map.setCenter(latLng);
    

    一旦结果可用,地图应以地理编码地址为中心。

    (要做到这一点,您需要将地图对象设为全局或以其他方式使其可用于 codeAddress。我建议在代码顶部添加“var map;”,并从使用前面删除“var”初始化中的地图)

    【讨论】:

    • 我已经尝试了你的建议,放 Var map;在屏幕顶部,从 initialise() 中的“var map”中移除 Var,将“return latlng”更改为“map.setCenter(latlng);”将原始的“Center: myLatlng”更改为 (0,0) 的预定义 Latlng 对象并尝试为 null。也称为codeAddress();地图初始化后,之前也尝试过。但没有任何效果...
    • 我解决了!你是对的,但是当我启动地图中心原点时,它放了 Latlng,插入 LatLng 导致 JS 错误......谢谢你的帮助。