我需要使用Google地图(v3)检查输入搜索字段的地址是否确实存在并将其打印出来。通过检查是否为该地址找到纬度/经度对,这很容易做到。但是,我有一个问题。
当用户输入广泛搜索时,例如像First Street这样的常见街道名称,我需要打印出找到的所有结果,以便用户可以选择一个。此时我不需要在地图上显示结果,只需在页面上显示它们的列表。我在网上找到了一些本应该做的代码,我修改了它,但它不起作用。我得到'GClientGeocoder()未定义'错误,但我怀疑即使我过去认为代码会有问题,所以我想知道是否有更多经验的人能指出我正确的方向。
这是代码,我将搜索术语“First Street”硬编码到用于测试目的的函数中。
function showAddress() {
var geo;
geo = new GClientGeocoder();
var search = 'First Street';
// ====== Perform the Geocoding ======
geo.getLocations(search, function (result)
{
//map.clearOverlays();
if (result.Status.code == G_GEO_SUCCESS) {
// ===== If there was more than one result, "ask did you mean" on them all =====
if (result.Placemark.length > 1) {
document.getElementById("message").innerHTML = "Did you mean:";
// Loop through the results
for (var i=0; i<result.Placemark.length; i++) {
document.getElementById("message").innerHTML += "<br>"+(i+1)+": "+result.Placemark[i].address;
}
}
// ===== If there was a single marker =====
else {
document.getElementById("message").innerHTML = "Result found:"+result.Placemark[0].address;
}
}
// ====== Decode the error status ======
else {
alert('No results found');
}
}
);
}
“消息”只是一个普通的<div>
。该函数从body标签调用:
<body onLoad='showAddress()'>
答案 0 :(得分:1)
此代码是为过时的V2-API创建的,我猜您正在加载V3-API脚本。
当我使用V2-API运行它时,它工作正常。
V2和V3无论如何都不兼容。
代码翻译为V3:
function showAddress() {
var geo = new google.maps.Geocoder();
var address = 'First Street';
geo.geocode({"address": address},
function(result,status)
{
var out='no results found';
if (status == google.maps.GeocoderStatus.OK)
{
if(result.length==1)
{
out = "Result found:"+result[0].formatted_address;
}
else
{
out = "Did you mean:";
for(var i=0;i<result.length;++i)
{
out+="<br>"+(i+1)+": "+result[i].formatted_address;
}
}
}
document.getElementById("message").innerHTML = out;
}
);
}