代码之家  ›  专栏  ›  技术社区  ›  phenry

谷歌地图mashup中的固定图例

  •  9
  • phenry  · 技术社区  · 18 年前

    我有一个带有谷歌地图mashup的页面,它有按日(星期一、星期二等)进行颜色编码的图钉。包含地图的iframe是动态调整大小的,因此当浏览器窗口调整大小时,它会调整大小。

    我想在地图窗口的一角放一个图例,告诉用户每种颜色的含义。谷歌地图API包括 GScreenOverlay 类,该类具有我想要的行为,但它只允许您指定一个要用作覆盖的图像,并且我希望使用一个包含文本的DIV。在地图窗口的左下角(例如,当浏览器窗口调整大小时,左下角将自动保持在相对于角的同一位置),最简单的方法是什么?

    2 回复  |  直到 13 年前
        1
  •  9
  •   Bernie Perez    18 年前

    您可以添加自己的自定义控件并将其用作图例。

    此代码将添加一个150w x 100h的框(灰色边框/白色背景),其中包含“Hello World”字样。您可以将文本替换为您希望在图例中显示的任何HTML。这将保持锚定在地图的右上角(G锚定在右上角),向下10像素,上方50像素。

    function MyPane() {}
    MyPane.prototype = new GControl;
    MyPane.prototype.initialize = function(map) {
      var me = this;
      me.panel = document.createElement("div");
      me.panel.style.width = "150px";
      me.panel.style.height = "100px";
      me.panel.style.border = "1px solid gray";
      me.panel.style.background = "white";
      me.panel.innerHTML = "Hello World!";
      map.getContainer().appendChild(me.panel);
      return me.panel;
    };
    
    MyPane.prototype.getDefaultPosition = function() {
      return new GControlPosition(
          G_ANCHOR_TOP_RIGHT, new GSize(10, 50));
          //Should be _ and not _
    };
    
    MyPane.prototype.getPanel = function() {
      return me.panel;
    }
    map.addControl(new MyPane());
    
        2
  •  3
  •   Tom Gruff    18 年前

    我将使用如下HTML:

    <div id="wrapper">
       <div id="map" style="width:400px;height:400px;"></div>
       <div id="legend"> ... marker descriptions in here ... </div>
    </div>
    

    然后,您可以设置此样式,使图例保持在右下角:

    div#wrapper { position: relative; }
    div#legend { position: absolute; bottom: 0px; right: 0px; }
    

    position: relative 将导致任何包含的元素相对于 #wrapper 容器,以及 position: absolute 将导致 #legend DIV将从流中“拉出”,并位于地图上方,使其右下角位于 包裹器 根据需要进行拉伸以包含标记描述。