【问题标题】:Disappearing custom markers - google maps v3消失的自定义标记 - 谷歌地图 v3
【发布时间】:2012-06-02 11:53:59
【问题描述】:

我正在尝试使用自定义标记创建地图。

当高度和宽度都相同时,一切正常。如果我将其中一个更改为更大(2x),则该标记开始表现得很有趣 - 它在地图上部分呈现,它在放大/缩小时消失并重新出现,在某些缩放级别上看起来不错。输入图像都是 128x128,我将它们缩放到 32x32,但我希望其中一些是 64x32

这是添加标记的主要功能(我之前尝试过的东西我注释掉了):

jQuery(xml).find("marker").each(function(){
var name = jQuery(this).find('name').text();
var address = jQuery(this).find('address').text();

// create a new LatLng point for the marker
var lat = jQuery(this).find('lat').text();
var lng = jQuery(this).find('lng').text();
var twidth = jQuery(this).find('width').text();
var theight = jQuery(this).find('height').text();
var point = new google.maps.LatLng(parseFloat(lat),parseFloat(lng));
var imgPath = jQuery(this).find('icon').text();

var hw = twidth/2;
var hh = theight/2;
var imageForMarker = new google.maps.MarkerImage(
    imgPath,
    null,     //new google.maps.Size(128, 128),
    // The origin for this image is 0,0.
    null,     //new google.maps.Point(0,0),
    // The anchor for this image is at the centre
    null,    //new google.maps.Point(hw, hh),
    // Scaled size
    new google.maps.Size(twidth, theight));

    // extend the bounds to include the new point
    MYMAP.bounds.extend(point);

    var marker = new google.maps.Marker({
            position: point,
            map: MYMAP.map,
            icon: imageForMarker,
            zIndex:0
        });

        citiesArray.push(marker);

        var html='<strong>'+name+'</strong.><br />'+address+'<br><img src="http://chart.apis.google.com/chart?cht=qr&chs=200x200&chl=http%3A//maps.google.com/maps%3Fq=%26ll%3D'+lat+'%2C'+lng+'%26z%3D14&chld=H|0">';

        google.maps.event.addListener(marker, 'click', function() {

        if(infoWindow)
            infoWindow.close();
        infoWindow = new google.maps.InfoWindow();

            infoWindow.setContent(html);

            infoWindow.open(MYMAP.map, marker);


        });

        MYMAP.map.fitBounds(MYMAP.bounds);

    });

xml 是这样的:

<?xml version="1.0"?>
<markers>

<marker>
<name>name1</name>
<address></address>
<lat>54.721844</lat>
<lng>17.41024</lng>
<width>32</width>
<height>32</height>
<icon>park2.png</icon>
</marker>

( ...)

<marker>
<name>name2</name>
<address></address>
<lat>50.417408112618686</lat>
<lng>23.491015625</lng>
<width>32</width>
<height>32</height>
<icon>park.png</icon>
</marker>

</markers>

这是 MYEDIT 定义 + 初始化:

变量信息窗口; var MYMAP = { 地图:空, 界限:空, 窗口:空 }

MYMAP.init = function(selector, latLng, zoom) {
var myOptions = {
zoom:zoom,
center: latLng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
this.map = new google.maps.Map(jQuery(selector)[0], myOptions);
this.bounds = new google.maps.LatLngBounds();
}

测试台位于:

http://null-zero.com/test/markers/markers.html

重要提示:您必须向下滚动,勾选 CITIES,然后在 GDANSK 附近的地图顶部应该会出现一座城堡 - 它已损坏(城堡的顶部可见),当您放大/缩小时会发生奇怪的事情。

有两个 PlaceMarkers 函数 - 底部的一个使用不同的宽度/高度并且已损坏 (placeMarkersCities)

任何想法是什么导致它以及如何解决它?

【问题讨论】:

  • 您找到解决方案了吗?我想我可能遇到了类似的问题。
  • 我想知道如果对问题进行编辑以使问题描述位于问题的顶部,在大块代码之前,是否会得到更好的响应?如果这不起作用,我们可能需要对其设置赏金。
  • 你检查过 hh 和 hw 是整数吗?我这里没有 jQuery,所以我无法测试你的代码。指向现场演示页面的链接会很有用。
  • 我已经添加了MYMAP定义+初始化
  • 也添加测试台 - 在描述的底部;)

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


【解决方案1】:

你当前的代码是

var twidth = jQuery(this).find('width').text();
var theight = jQuery(this).find('height').text();
...
new google.maps.Size(twidth, theight));

但是Size 需要两个数字。当地图对象输入错误的参数类型时,会发生奇怪的事情。在这种情况下,您只需将部分数据从字符串转换为数字。您不会转换 twidththeight

我建议在阅读时转换数据

var lat = parseFloat(jQuery(this).find('lat').text());
var lng = parseFloat(jQuery(this).find('lng').text());
var twidth = parseInt(jQuery(this).find('width').text());
var theight = praseInt(jQuery(this).find('height').text()); 

而不是在您使用它时(如在您当前的代码中)

var point = new google.maps.LatLng(parseFloat(lat),parseFloat(lng));

因为它只完成一次,你不必记住它。

【讨论】:

  • 哦,亲爱的,你是对的 ;) 我认为 javascript 能够即时转换内容,我想我错了。谢谢!
  • Javascript 确实 即时转换:"32"/2 = 16。但您不能假设 API 会为您做到这一点。
猜你喜欢
  • 2012-05-27
  • 1970-01-01
  • 2012-12-19
  • 2013-08-21
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多