0

因此,我编写了这段代码,它将普通地址转换为地理位置,并从您的 gps 位置(phonegap 位置、html5 位置或任何 latlng)返回地图和方向。该函数在 phonegap 或 html5 位置成功时被调用。

此代码在浏览器中工作正常,但失败并显示:错误:TypeError:'undefined' is not an object in file://bla bla at line 761

第 761 行 = geocoder.geocode ( { 'address': address }, function(results, status) {

所以我检查了我所有的变量,它们不像在线版本那样为空,并且返回 div 存在。所以我猜到谷歌的地理定位器链接有问题。

有趣的是,它显示的是地图而不是方向。它标志着你需要去的地方,而不是你所在的地方。好像只是方向没有加载或其他东西。

var directionDisplay;
var directionsService = new google.maps.DirectionsService();

function bring_me_back(call_back_map,call_back_directions,address,position) {
var latlng = new google.maps.LatLng(position.coords.latitude,position.coords.longitude); // your location
directionsDisplay = new google.maps.DirectionsRenderer();
var myOptions = {
    zoom: 14,
    center: latlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    mapTypeControl: true
};

var map = new google.maps.Map(document.getElementById(call_back_map),myOptions);
directionsDisplay.setMap(map);
directionsDisplay.setPanel(document.getElementById(call_back_directions));
var marker = new google.maps.Marker({
    position: latlng,
    map: map,
    title:"My location"
});
// find the address
var geocoder = new google.maps.Geocoder (map);
geocoder.geocode ( { 'address': address }, function(results, status)  {
    if (status == google.maps.GeocoderStatus.OK)  {
        var end = results [0].geometry.location;
        map.setCenter(results [0].geometry.location);
        marker.setPosition(results [0].geometry.location);
        var start = latlng; // your gps location 
        var request = {
            origin:start,
            destination:end,
            travelMode: google.maps.DirectionsTravelMode.WALKING
        };
        directionsService.route(request, function(response, status) {
            if (status == google.maps.DirectionsStatus.OK) {
                directionsDisplay.setDirections(response);
            } else  alert("Directions was not successful for the following reason: " + status);
        });
    }
    else {
        $('#'+call_back).html("Geocode was not successful for the following reason: " + status);
    }
});
}

我调用谷歌的方式(在我使用这段代码之前,它有足够的时间来加载和“初始化”被调用)。

function loadGoogleScript() {
if(!(navigator.network.connection.type == Connection.NONE)) {
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = 'http://maps.google.com/maps/api/js?v=3.6&sensor=false&callback=initialize';
    document.body.appendChild(script);
    return true;
}
else {
    return false;
}

}

API 的反馈是有限的,所以我不能再做任何事情了。

4

1 回答 1

0

经过一番搜索,我发现了一个变量:

var directionsService = new google.maps.DirectionsService();

在加载谷歌脚本之前调用。将其更改为

var directionsService;

并调用:

directionsService = new google.maps.DirectionsService();

从函数内部。

感谢帮助。

于 2013-05-10T20:51:31.597 回答