Google Maps API返回lat / long但错误未被捕获

时间:2017-04-12 12:57:36

标签: javascript google-maps google-maps-api-3

阅读这个标题可能会令人感到困惑......我同意。

所以我有一个地址,我想在Google地图上显示。我没有lat / long,所以我需要调用Google Maps API提供的Geocoder服务。

当我请求lat / long获取地址时,服务返回一个合法的值,但是当在地理编码函数的最后一行单步执行javascript时,代码将进入geocoder.js缩小的代码,从不返回(没有成功的结果,没有例外)。

我已经对使用Google Maps API进行了大量研究,据我所知,我已经完全实现了示例的显示方式。我在哪里错了?

这是调用lat / long服务的javascript代码:

function getLatLong(street, city, state, zip) {
    var geocoder = new google.maps.Geocoder();

    var address = street && street.length > 0 ? street + ' ' : '';
    address += city && city.length > 0 ? city + ', ' : '';
    address += state && state.length > 0 ? state + ' ' : '';
    address += zip && zip.length > 0 ? zip : '';

    var latLong = {
        lat: 0.0,
        long: 0.0
    };

    try {
        geocoder.geocode({ 'address' : address }, function(results, status) {
            if (status === google.maps.GeocoderStatus.OK) {
                return {
                    lat: results[0].geometry.location.lat(),
                    long: results[0].geometry.location.lng()
                };
            } else {
                return latLong;
            }
        });
    } catch (exception) {
        alert(e.message);
    }
}

(如果您不想在上面的代码中的catch上方的某个位置上执行此操作,那么就会丢失"

如果你想看到它的实际效果并自行完成,请访问以下网址:http://golfproxy.com/course/list

编辑:如果有帮助,这里添加地图和标记的功能,调用上面的getLatLong函数:

function plotMapHardCodePos(position) {
    var map = new google.maps.Map(document.getElementById('map'), {
        zoom: 9,
        center: position
    });

    $.each(tournaments.Result, function (i, item) {
        var latLong = {};

        if (!item.Latitude || !item.Longitude) {
            latLong = getLatLong(item.Street, item.City, item.State, item.ZipCode);

            if (latLong) {
                item.Latitude = latLong.lat;
                item.Longitude = latLong.long;
            }
        }

        if (!(item.Latitude === 0.0 && item.Longitude === 0.0)) {
            var marker = new google.maps.Marker({
                position: new google.maps.LatLng(item.Latitude, item.Longitude),
                map: map
            });

            marker.setIcon('http://maps.google.com/mapfiles/ms/icons/blue-dot.png');

            var infoWindow = new google.maps.InfoWindow({
                content: "<div class=''><h4><a href=\"#\">" + item.Name + "</a></h4></div><br/><span>" +
                    item.Body1 + "</span>" + "<br/><span>" + item.Body2 + "</span>"
            });

            google.maps.event.addListener(marker, 'click', function () {
                infoWindow.open(map, marker);
            });
        }
    });
}

1 个答案:

答案 0 :(得分:0)

您无法从异步回调函数返回任何内容,您需要在可用/可用时使用回调函数中的数据