Javascript 谷歌地图-删除以前的标记

Javascript 谷歌地图-删除以前的标记,javascript,google-maps,Javascript,Google Maps,在给出了一些关于如何清除谷歌地图上的标记的建议之后,我有了一个地图,我希望只显示一个标记(基本上是最后点击的标记)。我希望用户能够改变他们的想法,点击多次,但没有以前的点击混乱地图等 我已经试过地图了;功能,但它似乎永久清除了整个地图 function initialize() { if (GBrowserIsCompatible()) { var map = new GMap2(document.getElementById("googlemap"));

在给出了一些关于如何清除谷歌地图上的标记的建议之后,我有了一个地图,我希望只显示一个标记(基本上是最后点击的标记)。我希望用户能够改变他们的想法,点击多次,但没有以前的点击混乱地图等

我已经试过地图了;功能,但它似乎永久清除了整个地图

function initialize() {

    if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("googlemap"));

        map.setCenter(new GLatLng(50.401515,-4.866943), 8);

        GEvent.addListener(map,"click", function(overlay,latlng) {     
            if (latlng) {   
                var myHtml = "" + latlng ;
                split=myHtml.indexOf(",");       
                x=Math.round(myHtml.slice(1,split)*1000000)/1000000;
                y=Math.round(myHtml.slice(split+1,myHtml.length-1)*1000000)/1000000;
                document.collector.latitude.value=x;
                document.collector.longitude.value=y;
                lat="<br />Latitude: " + x;
                lon="<br />Longitude: " + y;
                latlon=""+lat+lon;

                //map.openInfoWindow(latlng, latlon);
                map.clearOverlay();
                map.addOverlay(new GMarker(latlng));
            }
        });
        map.addControl(new GLargeMapControl3D());
        map.addControl(new GMapTypeControl());
    }
}
函数初始化(){
if(GBrowserIsCompatible()){
VarMap=新的GMap2(document.getElementById(“谷歌地图”);
赛特中心地图(新格拉特林(50.401515,-4.866943),8);
addListener(映射,“单击”,函数(覆盖,latlng){
if(latlng){
var myHtml=”“+latlng;
split=myHtml.indexOf(“,”);
x=Math.round(myHtml.slice(1,split)*1000000)/1000000;
y=Math.round(myHtml.slice(split+1,myHtml.length-1)*1000000)/1000000;
document.collector.lation.value=x;
document.collector.longitude.value=y;
纬度=”
纬度:“+x; lon=“
经度:”+y; latlon=“”+lat+lon; //地图。openInfoWindow(latlng,latlon); clearOverlay(); 地图添加覆盖图(新GMarker(latlng)); } }); addControl(新的GLargeMapControl3D()); addControl(新的GMapTypeControl()); } }
未经测试,但应该做您想做的事情-请注意,
GMarker
方法是在API版本2.88中引入的:

function initialize() {

    if (GBrowserIsCompatible()) {
        var marker;

        function showNewMarker(latlng) {
            marker = new GMarker(latlng);
            map.addOverlay(marker);
            showMarker = updateExistingMarker;
        }

        function updateExistingMarker(latlng) {
            marker.setLatLng(latlng);
        }

        var showMarker = showNewMarker;

        var map = new GMap2(document.getElementById("googlemap"));

        map.setCenter(new GLatLng(50.401515,-4.866943), 8);

        GEvent.addListener(map,"click", function(overlay,latlng) {     
            if (latlng) {   
                var myHtml = "" + latlng ;
                split=myHtml.indexOf(",");       
                x=Math.round(myHtml.slice(1,split)*1000000)/1000000;
                y=Math.round(myHtml.slice(split+1,myHtml.length-1)*1000000)/1000000;
                document.collector.latitude.value=x;
                document.collector.longitude.value=y;
                lat="<br />Latitude: " + x;
                lon="<br />Longitude: " + y;
                latlon=""+lat+lon;

                //map.openInfoWindow(latlng, latlon);
                map.clearOverlay();
                showMarker(latlng);
            }
        });
        map.addControl(new GLargeMapControl3D());
        map.addControl(new GMapTypeControl());
    }
}
函数初始化(){
if(GBrowserIsCompatible()){
var标记;
功能显示新标记(latlng){
标记器=新的GMarker(latlng);
添加覆盖图(标记);
showMarker=updateExistingMarker;
}
函数更新现有标记(latlng){
标记器。设置LATLANG(LATLANG);
}
var showMarker=showNewMarker;
VarMap=新的GMap2(document.getElementById(“谷歌地图”);
赛特中心地图(新格拉特林(50.401515,-4.866943),8);
addListener(映射,“单击”,函数(覆盖,latlng){
if(latlng){
var myHtml=”“+latlng;
split=myHtml.indexOf(“,”);
x=Math.round(myHtml.slice(1,split)*1000000)/1000000;
y=Math.round(myHtml.slice(split+1,myHtml.length-1)*1000000)/1000000;
document.collector.lation.value=x;
document.collector.longitude.value=y;
纬度=”
纬度:“+x; lon=“
经度:”+y; latlon=“”+lat+lon; //地图。openInfoWindow(latlng,latlon); clearOverlay(); 显示标记(latlng); } }); addControl(新的GLargeMapControl3D()); addControl(新的GMapTypeControl()); } }

它通过使用包含函数引用的变量
showMarker
工作。这首先指向一个函数,
showNewMarker
,该函数创建一个标记,将其添加到地图中,然后将
showMarker
更改为指向函数
updateExistingMarker
,该函数仅使用
setLatLng
将标记移动到新位置。这意味着,在随后的单击中,现有标记将移动到单击位置。

未测试,但应执行您想要的操作-请注意,
GMarker
方法是在API 2.88版中引入的:

function initialize() {

    if (GBrowserIsCompatible()) {
        var marker;

        function showNewMarker(latlng) {
            marker = new GMarker(latlng);
            map.addOverlay(marker);
            showMarker = updateExistingMarker;
        }

        function updateExistingMarker(latlng) {
            marker.setLatLng(latlng);
        }

        var showMarker = showNewMarker;

        var map = new GMap2(document.getElementById("googlemap"));

        map.setCenter(new GLatLng(50.401515,-4.866943), 8);

        GEvent.addListener(map,"click", function(overlay,latlng) {     
            if (latlng) {   
                var myHtml = "" + latlng ;
                split=myHtml.indexOf(",");       
                x=Math.round(myHtml.slice(1,split)*1000000)/1000000;
                y=Math.round(myHtml.slice(split+1,myHtml.length-1)*1000000)/1000000;
                document.collector.latitude.value=x;
                document.collector.longitude.value=y;
                lat="<br />Latitude: " + x;
                lon="<br />Longitude: " + y;
                latlon=""+lat+lon;

                //map.openInfoWindow(latlng, latlon);
                map.clearOverlay();
                showMarker(latlng);
            }
        });
        map.addControl(new GLargeMapControl3D());
        map.addControl(new GMapTypeControl());
    }
}
函数初始化(){
if(GBrowserIsCompatible()){
var标记;
功能显示新标记(latlng){
标记器=新的GMarker(latlng);
添加覆盖图(标记);
showMarker=updateExistingMarker;
}
函数更新现有标记(latlng){
标记器。设置LATLANG(LATLANG);
}
var showMarker=showNewMarker;
VarMap=新的GMap2(document.getElementById(“谷歌地图”);
赛特中心地图(新格拉特林(50.401515,-4.866943),8);
addListener(映射,“单击”,函数(覆盖,latlng){
if(latlng){
var myHtml=”“+latlng;
split=myHtml.indexOf(“,”);
x=Math.round(myHtml.slice(1,split)*1000000)/1000000;
y=Math.round(myHtml.slice(split+1,myHtml.length-1)*1000000)/1000000;
document.collector.lation.value=x;
document.collector.longitude.value=y;
纬度=”
纬度:“+x; lon=“
经度:”+y; latlon=“”+lat+lon; //地图。openInfoWindow(latlng,latlon); clearOverlay(); 显示标记(latlng); } }); addControl(新的GLargeMapControl3D()); addControl(新的GMapTypeControl()); } }

它通过使用包含函数引用的变量
showMarker
工作。这首先指向一个函数,
showNewMarker
,该函数创建一个标记,将其添加到地图中,然后将
showMarker
更改为指向函数
updateExistingMarker
,该函数仅使用
setLatLng
将标记移动到新位置。这意味着,在随后的单击中,现有标记将移动到单击位置。

谢谢-这真的很有帮助!谢谢-这真的很有帮助!