Google Maps API v3.0保存对标记的引用

时间:2015-03-10 22:08:38

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

我使用的是Google Maps API v3.0 地图上有MULTIPLE标记(因此任何使用1标记的例子都不是我所追求的) 到目前为止情况还不错..但我不清楚如何在点击时保存对特定标记的引用? (我已经读过几个地方的建议,但没有例子)

有两个单独的实例,我希望将一个直接目标/引用返回到特定标记来控制/更改行为/图像..等等(无论如何)。

方案#1的示例: 1.)当我点击一个标记时,我目前正在弹出它。以及将其图标更改为其他图像。如果我点击一个新标记..我想将OLD标记定位为停止弹回/恢复到旧图标。我通过在我的标记上运行循环来实现这一目标。数组并停止所有标记上的所有动画..并将所有图标更改为旧(原始)图像。它工作..但我不希望有通过循环运行的开销。继续前进,我想将旧标记更改为第3个图标图像..(显示它之前已经与之交互过)..所以我需要一种方法来保存/设置一个标记的引用一旦被点击..所以我可以再次(直接)

方案#2的示例: 1.)我有一些控件' (元素)在地图之外,我想用它来与地图进行交互,以及特定的标记。

ie:拥有地图标记/条目OUTSIDE的图像..用户点击它的位置..它将地图滚动/平移到该特定标记(以及更改动画和图标图像)

这是我当前的点击监听器:

google.maps.event.addListener(addr[n], 'click', (function(marker, n) {
                    return function() {
                        infowindow.setContent(addr[n].title + "<br />" + addr[n].company + "<br />" + addr[n].workphone);
                        infowindow.open(map, addr[n]);

                        //increase z-index when marker has focus
                        addr[n].setZIndex(google.maps.Marker.MAX_ZINDEX + 1);
}
                })(marker, n));

问: 如何在点击地图时将DIRECT参考保存到地图上的标记,以便在另一个函数中使用并在那里引用?


回应MuffinMan:

谢谢......我还不清楚,至少它与我的项目有什么关系。

我 - 已经把东西保存到数组中了。 (上面的addr [n])

以下是为我构建addr [n]数组的类方法:

 public static function GMapMarker($markerId, $memberObject, $addressObject){
        $marker = 'var m_'.$memberObject->Id.'_'.$addressObject->AddressNum.' = new google.maps.LatLng('.$addressObject->Lat.','.$addressObject->Lon.');
                        marker = new google.maps.Marker({
                            animation: google.maps.Animation.DROP,
                            position: m_'.$memberObject->Id.'_'.$addressObject->AddressNum.',
                            title:"'.addslashes($memberObject->Full_Name).'",
                            company:"'.addslashes($memberObject->Company).'",
                            icon:"marker_gd.php?m=' . $markerId . '",
                            markerid:"'.$markerId.'",
                            id:"'.addslashes($memberObject->Id).'",
                            addressnum:"'.addslashes($addressObject->AddressNum).'",
                            refid:"m_'.$memberObject->Id.'_'.$addressObject->AddressNum.'",
                            workphone:"'.addslashes($memberObject->Work_Phone).'",
                            zIndex: '. (100 - preg_replace('/\D/','', $markerId)) .'
                        });
                        addr.push(marker);';

        return $marker;
    }

我无法知道数组中特定标记的顺序/索引。但是我确实给出了唯一的名字和标记lat / lon coords ....

但我不清楚以后如何用它来标记一个标记?

1 个答案:

答案 0 :(得分:2)

这是我在实施中使用的内容:

var markers = [];

for (var index = 0; index < data.length; index++) {
    var latlng = new google.maps.LatLng(data[index].lat, data[index].lng);
    var marker = new google.maps.Marker({position: latlng, map: map, title: data[index].label, icon: 'images/dot.gif'});

    google.maps.event.addListener(marker, 'click', function() {
        markers.push(marker);  /* marker saved here for later reference*/
    });
}
标记[]填充了您想要以后使用的标记。例如。标记物[0]。

您可以添加javascript支持的其他侦听器来处理标记上的其他事件,例如拖动和悬停。