我試圖使用Google Maps JavaScript API顯示自定義地圖。特別是,我試圖使用幾個jQuery腳本來顯示它,以允許地圖的旋轉。我不確定這部分是否相關。Google Maps Javascript API「未捕獲類型異常 - 未定義不是函數」
當使用標準Google Map數據(即地球貼圖)運行代碼時,它可以正常工作。所以這裏是我的地圖創建代碼:
// Standard google map
var map = new google.maps.Map2(document.getElementById('map'));
map.setCenter(new google.maps.LatLng(37.4419, -122.1419), 13);
這工作正常。但是,當我嘗試使用自定義地圖時,將自己的地圖塊(我已經在另一個項目中實現了,而沒有地圖旋轉)提供給我,我得到「未定義不是函數」。下面是已被添加到使用自定義的瓷磚,而不是標準的谷歌地圖數據的代碼:
google.load("maps", "2.x");
var customTypeOptions = {
getTileUrl: function (coord, zoom) {
var normalizedCoord = getNormalizedCoord(coord, zoom);
if (!normalizedCoord) {
return null;
}
var bound = Math.pow(2, zoom);
return "http://MYTILESURL/" + zoom + "/" + normalizedCoord.x + "/" + (bound - normalizedCoord.y - 1) + ".jpg";
},
tileSize: new google.maps.Size(256, 256),
maxZoom: 3,
minZoom: 0,
radius: 1024,
name: 'custom'
};
var customMapType = new google.maps.ImageMapType(customTypeOptions);
,然後在我的初始化()函數:
// Custom map
var myLatlng = new google.maps.LatLng(0, 0);
var myOptions = {
center: myLatlng,
zoom: 0,
streetViewControl: false,
mapTypeControlOptions: {
mapTypeIds: ['custom']
}
};
var map = new google.maps.Map(document.getElementById('map'), myOptions);
map.mapTypes.set('custom', customMapType);
map.setMapTypeId('custom');
我得到的錯誤是顯示「line 46」,在我的代碼中是「tileSize:new google.maps.Size(256,256)」。然而,我不確定這裏報告的46是否與我正在閱讀的46相同,即文件的第46行。
有沒有人有任何想法,爲什麼我得到這個「未定義不是函數」錯誤?
它看起來像你正在異步加載GMap庫,在這種情況下'google.maps.Size'可能不存在你調用它時?如果是這樣,你應該使用第三個參數的'callback'屬性到'google.load'來確保對象的存在。 – Graham 2012-07-11 15:44:27
我有「google.setOnLoadCallback(初始化);」作爲我腳本的最後一行,是否會達到同樣的效果? – breadbin 2012-07-11 15:50:42
是的,但您也需要在該方法內移動'customTypeOptions = ...'代碼。我已經將此添加爲適合您的正確答案。 – Graham 2012-07-11 15:53:05