代码之家  ›  专栏  ›  技术社区  ›  Matt

无法在Google Maps API调用中获取点

  •  0
  • Matt  · 技术社区  · 15 年前

    我有下面的HTML页面渲染来使用谷歌地图API。这已经运行了大约两个月,突然停止工作。我试图用getlatlng函数得到这个点,它似乎每次都返回空值。有没有人遇到过类似的问题或在这里看到什么错误?感谢您的帮助。

    使用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" });
                    }
                }
            );
        }
    }
    
    1 回复  |  直到 15 年前
        1
  •  1
  •   Mike Williams    15 年前

    这个代码没有问题。它对我来说非常有效。

    不幸的是,.getlatlng()失败时不会返回错误代码,当.getlatlng未返回任何内容时,此行将崩溃:

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

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

    尝试更改(!点)代码

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

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