javascript - 谷歌地图 : Multiple Custom HTML Markers

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

我一直在研究这个 fiddle ,我想要一些建议。

如您所见,我无法在正确的位置呈现多个标记。无论我做什么,这两个标记都基于 htmlMarker[i] 数组中第二个标记的位置呈现。

感谢您的帮助!

供引用,这里是 JS:

var overlay;

function initialize() {
    var myLatLng = new google.maps.LatLng(62.323907, -150.109291);
    var mapOptions = {
        zoom: 11,
        center: myLatLng,
        mapTypeId: google.maps.MapTypeId.SATELLITE
    };

    var gmap = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);

    function HTMLMarker(lat,lng){
        this.lat = lat;
        this.lng = lng;
        this.pos = new google.maps.LatLng(lat,lng);
    }

    HTMLMarker.prototype = new google.maps.OverlayView();
    HTMLMarker.prototype.onRemove= function(){}

    //init your html element here
    HTMLMarker.prototype.onAdd= function(){
        div = document.createElement('DIV');
        div.className = "htmlMarker";
        div.innerHTML = '<img src="http://www.vcsd.org/img/icon/red.png">';
        var panes = this.getPanes();
        panes.overlayImage.appendChild(div);
    }

    HTMLMarker.prototype.draw = function(){
        var overlayProjection = this.getProjection();
        var position = overlayProjection.fromLatLngToDivPixel(this.pos);
        var panes = this.getPanes();
        panes.overlayImage.style.left = position.x + 'px';
        panes.overlayImage.style.top = position.y + 'px';
    }

    //to use it
    htmlMarker = [];
    htmlMarker[0] = new HTMLMarker(gmap.getCenter().k, gmap.getCenter().D);
    htmlMarker[1] = new HTMLMarker(gmap.getCenter().k+.05, gmap.getCenter().D+.05);
    htmlMarker[0].setMap(gmap);
    htmlMarker[1].setMap(gmap);
}

我已经更新了 fiddle (参见更新)以在 HTMLMarker() 中进行一些日志记录;在脚本的末尾。这是输出:

HTMLMarker(lat,lng)= 62.323907, -150.10929099999998
HTMLMarker(lat,lng)= 62.373906999999996, -150.05929099999997
HTMLMarker.prototype.draw=500.5001116444473, 296.6240725676762
HTMLMarker.prototype.draw=573.3178894222365, 139.71828594914405

所以看起来传递了正确的信息,但某些地方的东西被覆盖了。

更新

我能够在 map 上隔离标记 HTML 元素。看起来它们嵌套在一个叠加层中:

<div style="transform: translateZ(0px); position: absolute; left: 573.317889422237px; top: 139.718285949144px; z-index: 104; width: 100%;">
  <div class="htmlMarker">
    <img src="http://www.vcsd.org/img/icon/red.png">
  </div>
  <div class="htmlMarker">
    <img src="http://www.vcsd.org/img/icon/red.png">
  </div>
</div>

最佳答案

您必须设置图像(或包含图像的 div)的位置。

目前您设置了 overlayImage-pane 的位置(它是单个元素,HTMLMarker 的每个实例都将附加到相同的元素/ Pane )

固定代码:

//init your html element here
HTMLMarker.prototype.onAdd= function(){
    this.div = document.createElement('DIV');
    this.div.className = "htmlMarker";
    this.div.style.position='absolute';
    this.div.innerHTML = '<img src="http://www.vcsd.org/img/icon/red.png">';
    var panes = this.getPanes();
    panes.overlayImage.appendChild(this.div);
}

HTMLMarker.prototype.draw = function(){
    var overlayProjection = this.getProjection();
    var position = overlayProjection.fromLatLngToDivPixel(this.pos);
    var panes = this.getPanes();
    this.div.style.left = position.x + 'px';
    this.div.style.top = position.y + 'px';
}

http://jsfiddle.net/q2cnne7y/17/

关于javascript - 谷歌地图 : Multiple Custom HTML Markers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29196855/

相关文章:

loops - 从 Clojure 循环中返回值

javascript - Google Maps Mouseout 仅适用于最后一个信息窗口

android - Android中的加权热图

javascript - 我的谷歌地图路径符号不居中

php - 使用 Google Maps API 查找两个位置之间的路线和距离并将其显示在表格中

google-maps - 有没有办法通过 API 获取 Google map 共享位置?

javascript - 如何在索引中使用表达式时遍历数组数组

javascript - Webview Javascript 在 Android 7.0 及更高版本中不起作用

javascript - 学习基础 --- 在 Javascript 中提取扩展

Javascript:删除正在使用 'for' 迭代的对象的属性是否安全