【问题标题】:Unable to get point in Google Maps API call无法在 Google Maps API 调用中获取点
【发布时间】:2009-10-26 15:02:27
【问题描述】:

我使用 Google Maps API 渲染了以下 HTML 页面。这已经运行了大约两个月,突然停止工作。我试图用 getLatLng 函数来理解这一点,它似乎每次都返回 null。有没有人遇到过类似的问题或在这里看到任何问题?任何帮助表示赞赏。

使用 API 版本 2。 ("v=2")

var map = null;
var geocoder = null;
var marker;
var g_address = "1 Yawkey Way Boston MA";
var toggleState = 0;
var toggleStateDir = 0;

var mapDir;
var gDir;
var geocoderDir = null;
var markerDir;
var g_addressDir = "100 Commonwealth Ave Boston MA";

var panorama;
var currentYaw = 180;
var currentPitch = 0;
var currentZoom = 0;

function initialize() 
{
    if (GBrowserIsCompatible()) 
    {
        // Map                        
        document.getElementById("address").value = g_address;
        document.getElementById("addressDir").value = g_addressDir;
        map = new GMap2(document.getElementById("map_canvas"));
        map.addControl(new GMapTypeControl());
        map.addControl(new GScaleControl());
        map.addControl(new GLargeMapControl3D());

        // Street View
        geocoder = new GClientGeocoder();
        panorama = new GStreetviewPanorama(document.getElementById("pano"));

        // Directions
        mapDir = new GMap2(document.getElementById("map_canvas_dir"));
        gDir = new GDirections(mapDir, document.getElementById("directions"));
        mapDir.addControl(new GMapTypeControl());
        mapDir.addControl(new GScaleControl());
        mapDir.addControl(new GLargeMapControl3D());

        // Traffic overlay
        map.setUIToDefault();
        var trafficOptions = { incidents: true };
        trafficInfo = new GTrafficOverlay(trafficOptions);
        mapDir.setUIToDefault();
        var trafficOptionsDir = { incidents: true };
        trafficInfoDir = new GTrafficOverlay(trafficOptionsDir);

        showAddress(g_address, g_addressDir);
    }
}

function showAddress(address, addressDir) 
{
    if (geocoder)
    {
        geocoder.getLatLng(address,
            function(point) {
                if (!point) {
                    alert(address + " not found" + response.Status.code);
                }
                else {
                    // Map                        
                    g_address = address
                    map.setCenter(point, 15);
                    marker = new GMarker(point);
                    map.addOverlay(marker);
                    // Street View
                    document.getElementById("lat").value = point.y;
                    document.getElementById("long").value = point.x;
                    document.getElementById("pano").removeAttribute("pano");
                    panorama.setLocationAndPOV(new GLatLng(point.y, point.x), { yaw: currentYaw, pitch: currentPitch, zoom: currentZoom });
                    // Directions
                    gDir.load("from: " + addressDir + " to: " + address, { "locale": "en_US" });
                }
            }
        );
    }
}

【问题讨论】:

  • 我试过你的代码,它似乎工作得很好。问题很可能出在其他地方。您是否尝试过使用控制台检查错误?

标签: javascript html google-maps


【解决方案1】:

该代码没有任何问题。它非常适合我。

很遗憾,.getLatLng() 失败时不会返回错误码,而当 .getLatLng 什么都不返回时,此行会崩溃:

alert(address + " not found" + response.Status.code);

我无法猜测您的 API 密钥是否存在问题(错误 610),或者您是否因发出过多地理编码请求而被阻止(错误 620)。我强烈怀疑它将是这两者之一,因为任何其他错误代码都会在我尝试时导致代码失败。

尝试将您的 (!point) 代码更改为

if (!point) {
   geocoder.getLocations(address, function(response) {
     alert(address + " not found: " + response.Status.code);
   });
}

在同一地址上使用 .getLocations() 并显示错误代码。

【讨论】:

  • Mike 它返回代码 610。我会对此进行调查。我的密钥应该是有效的,尽管它是直接从他们的网站复制/粘贴到那里的。
  • 610 也可能意味着 &sensor 值有问题。检查您是否已将“true_or_false”更改为“true”或“false”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
  • 2020-11-04
  • 2012-03-24
  • 1970-01-01
相关资源
最近更新 更多