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
将标记移动到新位置。这意味着,在随后的单击中,现有标记将移动到单击位置。谢谢-这真的很有帮助!谢谢-这真的很有帮助!