开发者

Unable to get point in Google Maps API call

I had the following HTML page rendering to use the Google Maps API. This has been running for about two months and all the sudden just stopped working. I am trying to get the point with the getLatLng function and it appears to be returning null everytime. Has anyone experienced a similar issue or see anything wrong here? Any help is appreciated.

Using Version 2 of the API. ("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.a开发者_开发问答ddControl(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" });
                }
            }
        );
    }
}


There's nothing wrong with that code. It works perfectly for me.

Unfortunately, .getLatLng() doesn't return an error code when it fails, and this line will crash when .getLatLng returns nothing:

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

I can't guess whether there's a problem with your API key (error 610) or if you've been blocked for making too many geocode requests (error 620). I strongly suspect that it will be one of those two because any other error code would be expected to cause the code to fail when I try it.

Try changing your (!point) code to

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

which uses .getLocations() on the same address and displays the error code.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜