我正在尝试使用google maps javascript API根据此示例映射地址。
https://google-developers.appspot.com/maps/documentation/javascript/examples/geocoding-simple
文档建议将客户端javascript方法作为处理请求配额的最佳方法。到现在为止还挺好。我的问题是从这个例子转到我的具体案例。我的地址已经在数据库中,所以我不需要用户输入一个。此外,我不希望地图加载页面。相反,我希望在用户点击链接时加载地址地图。
我有一个脚本工作,使用initialize()在div中加载地图。但我的问题是初始化以使用地理编码。示例中的地理编码取决于使用bodyonload初始化加载,这是我不想要的。
这是代码。非常感谢任何建议:
的javascript
var map;
var geocoder;
function codeAddress() {
var address = document.getElementById('address').value;
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});
} else {
alert('Geocode was not successful for the following reason: ' + status);
}
});
}
function initialize() {
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(40.7562008,-73.9903784);
var myOptions = {
zoom: 18,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}
HTML
<input id="address" type="hidden" value="Palo Alto CA">
<a href="javascript:void(0)" onclick="initialize()">View map without geocoding</a>
<div id="map_canvas" style="width:300px; height:300px;"></div>
<a href="javascript:void(0)" onclick="codeAddress()">View map of geocoded address</a>
答案 0 :(得分:2)
我对您的脚本唯一的问题是initialize()
函数中的以下行:
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
通过声明var map
,您的脚本只是声明一个名为map
的局部变量,而不是使用脚本顶部声明的全局map
变量。
通过删除var
,脚本使用全局变量并运行正常:
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
最后,要在链接点击上加载地理编码地图,请将地理编码地址的onclick
更改为onclick="initialize();codeAddress();"
。
<强>加了:强>
尝试将initialize()
和codeAddress()
方法合并到以下内容中:
function initialize() {
geocoder = new google.maps.Geocoder();
var address = document.getElementById('address').value;
geocoder.geocode({ 'address': address }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var myOptions = {
zoom: 18,
center: results[0].geometry.location,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
} else {
alert('Geocode was not successful for the following reason: ' + status);
}
});
}
然后只需从您的链接中拨打initialize()
。
基本上,我们正在做的是接听geocoder.geocode()
正在执行的codeAddress()
,并且在结果委托中,我们正在使用results[0].geometry.location
来初始化地图。这样,不需要显示临时latlong。