Google地图自定义内容框?

时间:2010-11-29 09:54:28

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

我似乎无法在Google Maps V3文档中找到有关为Google地图创建自定义内容框的内容。

以下是自定义内容框的示例:

http://www.apple.com/retail/alamoana/map/

我的问题是......你如何改变默认的白色气球弹出窗口?

干杯!

5 个答案:

答案 0 :(得分:4)

查看v3 utility libraries中的InfoBox工具包。我在dev.mapfaire.com使用它们,如果你想看看。

答案 1 :(得分:2)

就个人而言,我不会使用谷歌的任何自定义叠加脚本等。我创建了一个自定义的PHP页面,其中包含iframe,我可以在其中加载自定义的css文件,还可以创建自定义的DIV,它们会在地图的顶部重新定位,然后在打开时进行重新定位。

你可以使用" Drag,Dragstart,Dragend"事件,以帮助您重新定位您已创建的元素。

如果您在页面上设置了自定义标记,则可以使用此功能获取其像素位置:

getPosition: function (marker) {
        var map = this.map /* Your map, in my case is part of my controller object linked to this.map */;
        var scale = Math.pow(2, map.getZoom());
        var nw = new google.maps.LatLng(
            map.getBounds().getNorthEast().lat(),
            map.getBounds().getSouthWest().lng()
        );
        var worldCoordinateNW = map.getProjection().fromLatLngToPoint(nw);
        var worldCoordinate = map.getProjection().fromLatLngToPoint(marker.getPosition());
        var pixelOffset = new google.maps.Point(
            Math.floor((worldCoordinate.x - worldCoordinateNW.x) * scale),
            Math.floor((worldCoordinate.y - worldCoordinateNW.y) * scale)
        );
        return pixelOffset; /* Returns the top left pixel of the specified marker on the specified map */
    }

然后我使用在拖动窗口时使用的setPosition函数,它将自定义元素的位置设置为标记的位置。 拖动事件可以这样设置: google.maps.addEventListener(map,' drag',function(){setPosition(marker,element);});

setPosition函数使用getPosition(marker)函数简单地收集元素的宽度,高度和与标记关联的像素偏移量:

setPosition: function (marker,element) {
    var p = this.getPosition(marker),
        s = {width:element.offsetWidth,height:element.offsetHeight},
        markerOffset = {width:58,height:58};
    element.style.left = p.x - (s.width/2) + (markerOffset.width/2) + "px"; /* We set the element's left position to the marker's position + half of our element's width + half of the marker's width's so it is centered */
    element.style.top = p.y - s.height - (markerOffset.height) + 10 + "px"; /* We set the element's top position to the marker's position + our element's height + markers height so it is 10px above our marker vertically */
},

有时你只需要在框外思考

答案 2 :(得分:0)

该示例使用的是谷歌地图的第二个版本。该功能可能在第3版中不可用。

但是你可以在infowindows中添加任何html代码并对其进行个性化。我不确定你是否可以直接改变它们的外观,但你绝对可以改变内容的样子。

编辑:我找到了一些示例代码:http://gmaps-samples-v3.googlecode.com/svn/trunk/infowindow_custom/infowindow-custom.html

答案 3 :(得分:0)

答案 4 :(得分:0)

正如Sudhir指出的那样,Infobox插件是实现您想要的一种方式。我最近回答了关于using the infobox plugin for google maps api 3的类似问题,并提供了一个完整的示例。