2014-01-19 4 views
0

У меня есть проблема, когда я использую этот код в пользовательских картах с моего сервера (ниже приведен пример из документации Google, но мой скрипт аналогичен исключению пути к карте). Асинхронный загрузка не работает для меня:Async в пользовательских картах Google не работает

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Image map types</title> 
    <style> 
     html, body, #map-canvas { 
     height: 100%; 
     margin: 0px; 
     padding: 0px 
     } 
    </style> 
    <script> 
var moonTypeOptions = { 
    getTileUrl: function(coord, zoom) { 
     var normalizedCoord = getNormalizedCoord(coord, zoom); 
     if (!normalizedCoord) { 
     return null; 
     } 
     var bound = Math.pow(2, zoom); 
     return 'http://mw1.google.com/mw-planetary/lunar/lunarmaps_v1/clem_bw' + 
      '/' + zoom + '/' + normalizedCoord.x + '/' + 
      (bound - normalizedCoord.y - 1) + '.jpg'; 
    }, 
    tileSize: new google.maps.Size(256, 256), 
    maxZoom: 9, 
    minZoom: 0, 
    radius: 1738000, 
    name: 'Moon' 
}; 

var moonMapType = new google.maps.ImageMapType(moonTypeOptions); 

function initialize() { 
    var myLatlng = new google.maps.LatLng(0, 0); 
    var mapOptions = { 
    center: myLatlng, 
    zoom: 1, 
    streetViewControl: false, 
    mapTypeControlOptions: { 
     mapTypeIds: ['moon'] 
    } 
    }; 

    var map = new google.maps.Map(document.getElementById('map-canvas'), 
     mapOptions); 
    map.mapTypes.set('moon', moonMapType); 
    map.setMapTypeId('moon'); 
} 

// Normalizes the coords that tiles repeat across the x axis (horizontally) 
// like the standard Google map tiles. 
function getNormalizedCoord(coord, zoom) { 
    var y = coord.y; 
    var x = coord.x; 

    // tile range in one direction range is dependent on zoom level 
    // 0 = 1 tile, 1 = 2 tiles, 2 = 4 tiles, 3 = 8 tiles, etc 
    var tileRange = 1 << zoom; 

    // don't repeat across y-axis (vertically) 
    if (y < 0 || y >= tileRange) { 
    return null; 
    } 

    // repeat across x-axis 
    if (x < 0 || x >= tileRange) { 
    x = (x % tileRange + tileRange) % tileRange; 
    } 

    return { 
    x: x, 
    y: y 
    }; 
} 

google.maps.event.addDomListener(window, 'load', initialize); 

function loadScript() { 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = 'http://maps.googleapis.com/maps/api/js?sensor=false&' + 
     'callback=initialize'; 
    document.body.appendChild(script); 
} 

window.onload = loadScript; 

     </script> 
    </head> 
    <body> 
    <div id="map-canvas"></div> 
    </body> 
</html> 

Мой сайт пустой и консоли показать мне:

Uncaught ReferenceError: google is not defined 

Но когда я использую этот код:

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Image map types</title> 
    <style> 
     html, body, #map-canvas { 
     height: 100%; 
     margin: 0px; 
     padding: 0px 
     } 
    </style> 
    <script> 
function loadScript() { 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = 'http://maps.googleapis.com/maps/api/js?sensor=false&' + 
     'callback=initialize'; 
    document.body.appendChild(script); 
} 

window.onload = loadScript; 

var moonTypeOptions = { 
    getTileUrl: function(coord, zoom) { 
     var normalizedCoord = getNormalizedCoord(coord, zoom); 
     if (!normalizedCoord) { 
     return null; 
     } 
     var bound = Math.pow(2, zoom); 
     return 'http://mw1.google.com/mw-planetary/lunar/lunarmaps_v1/clem_bw' + 
      '/' + zoom + '/' + normalizedCoord.x + '/' + 
      (bound - normalizedCoord.y - 1) + '.jpg'; 
    }, 
    tileSize: new google.maps.Size(256, 256), 
    maxZoom: 9, 
    minZoom: 0, 
    radius: 1738000, 
    name: 'Moon' 
}; 

var moonMapType = new google.maps.ImageMapType(moonTypeOptions); 

function initialize() { 
    var myLatlng = new google.maps.LatLng(0, 0); 
    var mapOptions = { 
    center: myLatlng, 
    zoom: 1, 
    streetViewControl: false, 
    mapTypeControlOptions: { 
     mapTypeIds: ['moon'] 
    } 
    }; 

    var map = new google.maps.Map(document.getElementById('map-canvas'), 
     mapOptions); 
    map.mapTypes.set('moon', moonMapType); 
    map.setMapTypeId('moon'); 
} 

// Normalizes the coords that tiles repeat across the x axis (horizontally) 
// like the standard Google map tiles. 
function getNormalizedCoord(coord, zoom) { 
    var y = coord.y; 
    var x = coord.x; 

    // tile range in one direction range is dependent on zoom level 
    // 0 = 1 tile, 1 = 2 tiles, 2 = 4 tiles, 3 = 8 tiles, etc 
    var tileRange = 1 << zoom; 

    // don't repeat across y-axis (vertically) 
    if (y < 0 || y >= tileRange) { 
    return null; 
    } 

    // repeat across x-axis 
    if (x < 0 || x >= tileRange) { 
    x = (x % tileRange + tileRange) % tileRange; 
    } 

    return { 
    x: x, 
    y: y 
    }; 
} 

google.maps.event.addDomListener(window, 'load', initialize); 

     </script> 
    </head> 
    <body> 
    <div id="map-canvas"></div> 
    </body> 
</html> 

Google Карты загружаются на страница, но все еще показывает мне:

Uncaught ReferenceError: google is not defined 

Что может быть причиной?

ответ

0

Любое появление google в глобальном масштабе (вне функции) приведет к этой ошибке. При первом обращении к google в initialize.

Смежные вопросы