我之前说是API BUG的一段演示代码

3 views
Skip to first unread message

马日拉

unread,
Aug 21, 2007, 8:47:37 AM8/21/07
to Google 地图 API 讨论组
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/
>
<title>Google 地图 JavaScript API 示例</title>
<script src="http://ditu.google.com/maps?
file=api&amp;v=2&amp;key=12345"
type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
var map;
var mapCtrl;
var batch = [];

function load() {
if (GBrowserIsCompatible()) {
map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(39.917, 116.397), 14);

var bounds = map.getBounds();
var southWest = bounds.getSouthWest();
var northEast = bounds.getNorthEast();
var lngSpan = northEast.lng() - southWest.lng();
var latSpan = northEast.lat() - southWest.lat();

for (var i = 0; i < 10; i++) {
var point = new GLatLng(southWest.lat() + latSpan * Math.random(),
southWest.lng() + lngSpan *
Math.random());
marker = createMarker(point, i + 1);
batch.push(marker);
}

mgr = new GMarkerManager(map);
mgr.addMarkers(batch,14);
mgr.refresh();
}
}

// 在给定的点上创建带编号的标注
function createMarker(point, number) {
var marker = new GMarker(point);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml("标注 #<b>" + number + "</b>");
});
return marker;
}

function reload()
{
map.clearOverlays();
}

//]]>
</script>
</head>
<body onload="load();" onunload="GUnload();">
<a onclick="reload();">Reload</a>
<div id="map" style="width: 500px; height: 300px"></div>
</body>
</html>

点一下Reload() 清除地图上所有的标注。 然后请拖拽地图到较远处(越远越好),再拖回原来的地图中心。
请告诉我为什么若干标注(有时候是全部,有时候是一个)又回到地图上来了?我要如何才能彻底清除这些标注?

Zhang Jingjun

unread,
Aug 21, 2007, 9:27:35 AM8/21/07
to Google-Map...@googlegroups.com
我试验了一下,现象的确如你所描述的。
我自己的网站没有用到GMarkerManager,对这个类不大了解。刚才临时看了一下文档,有以下意见:
1、GMarkerManager不是GOverlay的实现,因此reload()里面的clearOverlay不会清除GMarkerManager
2、clearOverlay只是把Overlay从地图上清除(隐去,不显示),但是并没有回收Overlay的实例,因此clearOveray之后所有的Marker都还在,随时可以重新显示
3、拖回原来的地图中心时,GMarkerManager依然在起作用,因此肯定会触发GMarkerManager的refresh()调用,从而根据其判断重新将全部或者部分Marker显示出来。

以上分析只是我个人的看法。如果这些分析是对的话,说明所有的代码都正常工作,程序中没有Bug。
至于程序不能按照你的意愿工作,那只能说明你没有按照你自己的意愿来正确书写程序,换句话说是程序的设计问题。




On 8/21/07, 马日拉 <maril...@gmail.com> wrote:
点一下Reload() 清除地图上所有的标注。 然后请拖拽地图到较远处(越远越好),再拖回原来的地图中心。
请告诉我为什么若干标注(有时候是全部,有时候是一个)又回到地图上来了?我要如何才能彻底清除这些标注?






--
阿图仔www.artozi.com
上海市中山北路3856弄2号中环大厦2506室
+86 (21) 52680420
MSN: jjzha...@hotmail.com

马日拉

unread,
Aug 21, 2007, 9:59:21 AM8/21/07
to Google 地图 API 讨论组
我最后已经提出了这个问题,我要如何才能彻底清除这些标注?

既然单个标注是可以从map上被remove掉的,那为何GMarkerManager不提供一个能够remove掉marker的方法?
GMap2中也没有提到用GMarkerManager添加标注如何清除。

实际应用中,调用GMarkerManager中的一个标注a的hide()方法,a将隐藏,a.isHidden()此时为true,当拖动地图到远
处再回来,发现a已经显示出来的,但a.isHidden()依然为true。

也就是说GMarkerManager管理标注的时候肯定发生问题了,无论如何,一个标注如果被显示出来了,那它的isHidden()不应该仍然为
true。

演示代码只是说明了一些简单的问题,我不会因此认为是BUG,我市在深入研究后才觉得有问题。况且,按你说的,我本来也认为
GMarkerManager自己refresh()了,但
第二次显示出来的那些标注并不是全部显示出来,而是零落的,除非拖到很远再拖回来才会全部显示,这是为什么?并且既然显示出来了,为什么单个
Marker的isHidden()依然是true?

你认为这不是BUG吗?Google不是神,你一直就在跟我争论的焦点就是"Google不会有BUG,你好好检查自己的程序吧",这种争论有意义吗?
你有时间还不如研究一下我的问题,给我提供一个解决方案。


On 8月21日, 下午9时27分, "Zhang Jingjun" <zhang.jing...@gmail.com> wrote:
> 我试验了一下,现象的确如你所描述的。
> 我自己的网站没有用到GMarkerManager,对这个类不大了解。刚才临时看了一下文档,有以下意见:
> 1、GMarkerManager不是GOverlay的实现,因此reload()里面的clearOverlay不会清除GMarkerManager
> 2、clearOverlay只是把Overlay从地图上清除(隐去,不显示),但是并没有回收Overlay的实例,因此clearOveray之后所有的Marker都还在,随时可以重新显示
> 3、拖回原来的地图中心时,GMarkerManager依然在起作用,因此肯定会触发GMarkerManager的refresh()调用,从而根据其判断重新将全部或者部分Marker显示出来。
>
> 以上分析只是我个人的看法。如果这些分析是对的话,说明所有的代码都正常工作,程序中没有Bug。
> 至于程序不能按照你的意愿工作,那只能说明你没有按照你自己的意愿来正确书写程序,换句话说是程序的设计问题。
>

> On 8/21/07, 马日拉 <marilaw...@gmail.com> wrote:
>
>
>
> > 点一下Reload() 清除地图上所有的标注。 然后请拖拽地图到较远处(越远越好),再拖回原来的地图中心。
> > 请告诉我为什么若干标注(有时候是全部,有时候是一个)又回到地图上来了?我要如何才能彻底清除这些标注?
>
> --
> 阿图仔www.artozi.com
> 上海市中山北路3856弄2号中环大厦2506室
> +86 (21) 52680420

> MSN: jjzhang2...@hotmail.com

马日拉

unread,
Aug 21, 2007, 10:00:08 AM8/21/07
to Google 地图 API 讨论组
我最后已经提出了这个问题,我要如何才能彻底清除这些标注?

既然单个标注是可以从map上被remove掉的,那为何GMarkerManager不提供一个能够remove掉marker的方法?
GMap2中也没有提到用GMarkerManager添加标注如何清除。

实际应用中,调用GMarkerManager中的一个标注a的hide()方法,a将隐藏,a.isHidden()此时为true,当拖动地图到远
处再回来,发现a已经显示出来的,但a.isHidden()依然为true。

也就是说GMarkerManager管理标注的时候肯定发生问题了,无论如何,一个标注如果被显示出来了,那它的isHidden()不应该仍然为
true。

演示代码只是说明了一些简单的问题,我不会因此认为是BUG,我市在深入研究后才觉得有问题。况且,按你说的,我本来也认为
GMarkerManager自己refresh()了,但
第二次显示出来的那些标注并不是全部显示出来,而是零落的,除非拖到很远再拖回来才会全部显示,这是为什么?并且既然显示出来了,为什么单个
Marker的isHidden()依然是true?

你认为这不是BUG吗?Google不是神,你一直就在跟我争论的焦点就是"Google不会有BUG,你好好检查自己的程序吧",这种争论有意义吗?
你有时间还不如研究一下我的问题,给我提供一个解决方案。


On 8月21日, 下午9时27分, "Zhang Jingjun" <zhang.jing...@gmail.com> wrote:

> 我试验了一下,现象的确如你所描述的。
> 我自己的网站没有用到GMarkerManager,对这个类不大了解。刚才临时看了一下文档,有以下意见:
> 1、GMarkerManager不是GOverlay的实现,因此reload()里面的clearOverlay不会清除GMarkerManager
> 2、clearOverlay只是把Overlay从地图上清除(隐去,不显示),但是并没有回收Overlay的实例,因此clearOveray之后所有的Marker都还在,随时可以重新显示
> 3、拖回原来的地图中心时,GMarkerManager依然在起作用,因此肯定会触发GMarkerManager的refresh()调用,从而根据其判断重新将全部或者部分Marker显示出来。
>
> 以上分析只是我个人的看法。如果这些分析是对的话,说明所有的代码都正常工作,程序中没有Bug。
> 至于程序不能按照你的意愿工作,那只能说明你没有按照你自己的意愿来正确书写程序,换句话说是程序的设计问题。
>

> On 8/21/07, 马日拉 <marilaw...@gmail.com> wrote:
>
>
>
> > 点一下Reload() 清除地图上所有的标注。 然后请拖拽地图到较远处(越远越好),再拖回原来的地图中心。
> > 请告诉我为什么若干标注(有时候是全部,有时候是一个)又回到地图上来了?我要如何才能彻底清除这些标注?
>
> --
> 阿图仔www.artozi.com
> 上海市中山北路3856弄2号中环大厦2506室
> +86 (21) 52680420

> MSN: jjzhang2...@hotmail.com

Zhang Jingjun

unread,
Aug 21, 2007, 10:17:21 AM8/21/07
to Google-Map...@googlegroups.com
既然你不愿意研究自己的问题,那你就在这里等待Google的帮助吧。
自助者,天助之


On 8/21/07, 马日拉 <maril...@gmail.com> wrote:
MSN: jjzha...@hotmail.com

马日拉

unread,
Aug 21, 2007, 7:25:57 PM8/21/07
to Google 地图 API 讨论组
你是不是缺乏理解能力,我一直在研究我自己的问题,研究问题的人才能提出问题,而不是崇尚权威。

我现在有替代的解决方案,那就是每次重新加载地图,只是我认为这样解决在效率上很不划算。GMarkerManager应该提供一个可以清除标注的方
法,或者它可能提供了但我还没发现。我是在这里讨论问题的,而不是争论Google有没有Bug的,它是一家公司,不是上帝。

研究自己的问题不代表永远不质疑权威,你的这种对待事物的态度,是典型的国人作风。


On 8月21日, 下午10时17分, "Zhang Jingjun" <zhang.jing...@gmail.com> wrote:
> 既然你不愿意研究自己的问题,那你就在这里等待Google的帮助吧。
> 自助者,天助之
>

> MSN: jjzhang2...@hotmail.com

滋文苏

unread,
Aug 21, 2007, 8:44:21 PM8/21/07
to Google-Map...@googlegroups.com
讨论得很激烈。可以把GOOGLE的LIB包下载下来研究研究,

Zhang Jingjun

unread,
Aug 21, 2007, 10:42:39 PM8/21/07
to Google-Map...@googlegroups.com
挑战权威不是动辄指责别人,更不是把普通的讨论上升为国人素质问题。
既然你认为我缺乏理解能力,那我闭嘴就是了,好自为之,呵呵。


On 8/22/07, 马日拉 <maril...@gmail.com > wrote:

ashuai

unread,
Aug 22, 2007, 9:21:39 PM8/22/07
to Google 地图 API 讨论组
创建的时候把markers存入数组,要移除的时候用remove方法
map.removeOverlay(marker[i]);

On 8月22日, 上午10时42分, "Zhang Jingjun" <zhang.jing...@gmail.com> wrote:
> 挑战权威不是动辄指责别人,更不是把普通的讨论上升为国人素质问题。
> 既然你认为我缺乏理解能力,那我闭嘴就是了,好自为之,呵呵。
>

revlis7

unread,
Aug 23, 2007, 12:20:33 PM8/23/07
to Google 地图 API 讨论组
添加单个标记是没有问题的,问题出在批量添加的时候.
Reply all
Reply to author
Forward
0 new messages