在JavaScript Google Map的中心显示十字准线

Dre*_*kes 10 javascript google-maps overlay

我想显示一个固定在谷歌地图中心的十字准线/十字线,就像Wikimapia.org那样.不幸的是他们正在使用API​​的v2而我正在使用v3.

当用户平移地图时,十字准线应保持固定在中心.

ControlPosition枚举没有CENTER选项,所以我想任何解决方案都会有点hacky.

我试图将它叠加为地图之外的div,但我还没有设法让它显示在地图上 - 它似乎在z顺序摊牌中被打败.

Ben*_*tFX 10

给定的解决方案对我不起作用,因为叠加的div在地图中创建了一个死角.使用Google Maps JavaScript API V3,我的项目的更好解决方案是在地图上创建一个具有1像素矩形形状的标记.然后使用maps bounds_changed事件重新定位标记.

标线图像是63 x 63 png.(图像/ reticle.png)

定义标记图像和形状......

  var reticleImage = new google.maps.MarkerImage(
    'images/reticle.png',            // marker image
    new google.maps.Size(63, 63),    // marker size
    new google.maps.Point(0,0),      // marker origin
    new google.maps.Point(32, 32));  // marker anchor point
  var reticleShape = {
    coords: [32,32,32,32],           // 1px
    type: 'rect'                     // rectangle
  };
Run Code Online (Sandbox Code Playgroud)

创建我们的地图(main_map)后,我们添加标记......

  reticleMarker = new google.maps.Marker({
    position: latlng,
    map: main_map,
    icon: reticleImage, 
    shape: reticleShape,
    optimized: false,
    zIndex: 5
  });
Run Code Online (Sandbox Code Playgroud)

var latlng与用于创建main_map的LatLng对象相同.zIndex应该大于任何其他标记zIndex,以使标线保持在顶部.

然后我们添加一个事件处理程序,在触发map bounds_changed时调用.

  google.maps.event.addListener(main_map, 'bounds_changed', centerReticle);
Run Code Online (Sandbox Code Playgroud)

最后我们有了centerReticle()函数.

  function centerReticle(){
    reticleMarker.setPosition(main_map.getCenter());
  }
Run Code Online (Sandbox Code Playgroud)

由于我们没有对'bounds_changed'事件做任何其他事情,我们可以通过将匿名函数传递给addListener调用来整理代码...这使我们不必定义centerReticle()函数.

  google.maps.event.addListener(main_map, 'bounds_changed',
      function(){reticleMarker.setPosition(main_map.getCenter());});
Run Code Online (Sandbox Code Playgroud)

它实际上很漂亮.我希望这有助于其他人.

谢谢.

跳跃

  • 这种方法的一个小问题是,当您放大和缩小时(无论如何在Win7 Chrome上)标记会有点不稳定.在缩放动画的中间帧期间它会被拉伸.有什么想法吗?也许还有另一个可以被吸引的事件. (2认同)

Dre*_*kes 9

好吧,我是一个傻瓜,并且正在努力使它变得更加艰难.

而不是删除问题,这是一个解决方案,以防它帮助其他人:

<div id="container">
    <div id="map"></div>
    <div id="reticule"><img src="reticule.gif" /></div>
</div>
Run Code Online (Sandbox Code Playgroud)

还有一些款式:

#container { position:relative; }
#map { height:100%; width:100%; }
#reticule {
    position:absolute;
    width:13px;
    height:13px;
    left:50%;
    top:50%;
    margin-top:-8px;
    margin-left:-8px;
    pointer-events: none;
}
Run Code Online (Sandbox Code Playgroud)

那不是地图的确切中心


Gar*_*ope 6

我正在使用我在DaftLogic.com上找到的解决方案.它似乎与BentFX基本相同,但更简洁.

var marker = new google.maps.Marker({
    map: map,
    icon: '/images/reticle.png'
});
marker.bindTo('position', map, 'center'); 
Run Code Online (Sandbox Code Playgroud)

不幸的是,它也遇到了Drew注意到的问题,即十字准线没有永久固定在地图的中心.如果快速拖动地图或放大和缩小地图,您会看到十字准线移动一点,直到有时间重新定位.如果有人想出更好的解决方案,请告诉我们.