无法创建自定义MapType:google.maps.MapType不是函数

时间:2015-12-22 11:42:43

标签: javascript google-maps-api-3

我试图创建自己的MapType,但它会导致

Uncaught TypeError: google.maps.MapType is not a function

这很奇怪,因为API实际上已加载 - 如果我评论/删除MapType代码,所有其他函数都能正常工作:

var customMapType = new google.maps.MapType({
    maxZoom: 24
});

这里的地图初始化:

function initMap(placeholderId, aCenter)
{
    var mapOptions =
            {
                center: aCenter,
                mapTypeControl: false,
                streetViewControl: false,
                scaleControl: true,
                rotateControl: true,
                mapTypeId: google.maps.MapTypeId.SATELLITE
            }

    return new google.maps.Map(document.getElementById(placeholderId), mapOptions);
}

API初始化:

function InitializeLayoutControl(onLoadComplete, googleAPIKey)
{
    loadCompleteCallback = onLoadComplete;
    loadScript("https://maps.googleapis.com/maps/api/js?v3.exp&" + ((typeof googleAPIKey === 'undefined' || googleAPIKey === '') ? "" : "key=" + googleAPIKey + "&") + "callback=LoadComplete&libraries=drawing,places,geometry");
}

(这很有效)

2 个答案:

答案 0 :(得分:0)

我相信您需要从google.maps.MapType更改为google.maps.ImageMapType

根据https://developers.google.com/maps/documentation/javascript/maptypes?hl=en

没有机会尝试,但看起来像是问题。

答案 1 :(得分:0)

google.maps.MapType是一个界面。请看一下这个link。这不能直接使用,您必须通过实现它的类访问它或创建一个类来实现它。在创建自定义地图类型时,您可能需要MapTypeRegistry。这将存储该特定地图的自定义地图类型。

这是文档中的example

// Modify the control to only display two maptypes, the
// default ROADMAP and the custom 'mymap'.
// Note that because this is simply an association, we
// don't need to modify the MapTypeRegistry beforehand.

var MY_MAPTYPE_ID = 'mymaps';

var mapOptions = {
zoom: 12,
center: brooklyn,
mapTypeControlOptions: {
  mapTypeIds: [google.maps.MapTypeId.ROADMAP, MY_MAPTYPE_ID]
},
  mapTypeId: MY_MAPTYPE_ID
};

// Create our map. This creation will implicitly create a
// map type registry.
map = new google.maps.Map(document.getElementById("map"),
    mapOptions);

// Create your custom map type using your own code.
// (See below.)
var myMapType = new MyMapType();

// Set the registry to associate 'mymap' with the
// custom map type we created, and set the map to
// show that map type.
map.mapTypes.set(MY_MAPTYPE_ID, myMapType);