-1

我想创建一个页面,我将与Excel与Excel集成。 。点击时,我想添加事件监听器到标记。我几乎无法设法为单个标记创建一个“单击侦听器”,但我无法将其用于使用循环动态创建的多个标记。创建事件监听器来动态创建谷歌地图标记

当点击标记时,我想让街景更新为新点击的标记位置。

我真的很感激任何建议。 谢谢。

这就是我所拥有的(来自这里和那里)。

<!DOCTYPE html> 
<html> 
    <head> 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 
    <meta charset="utf-8"> 
    <title>Simple markers</title> 
    <style> 
     html, body, #map-canvas { 
     height: 100%; 
     margin: 0; 
     padding: 0; 
     } 

    </style> 
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script> 
    <script> 


var labels = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; //me 
var labelIndex = 0;      //me 
var map; 
var panorama; 

//this will be created from server side 

    var markers = [ 
    { lat: 39.976784, lng: -75.234347, name: "marker 1" }, 
    { lat: 39.977043, lng: -75.235087, name: "marker 2" }, 
    { lat: 39.976097, lng: -75.234508, name: "marker 3" }, 
    { lat: 39.977059, lng: -75.233682, name: "marker 4" } 
]; 
var myLatlng = new google.maps.LatLng(markers[0].lat,markers[0].lng); 


function initialize() { 
//var sv = new google.maps.StreetViewService(); 
panorama = new google.maps.StreetViewPanorama(document.getElementById('pano')); 


var mapOptions = { 
    zoom: 16, 
    center: myLatlng 
} 
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 
var panoramaOptions = { 

    navigationControl: true, 
    position: myLatlng, 
    //pov: { 
    //heading: 34, 
    //pitch: 10 
    //} 
}; 
// Set the initial Street View camera to the center of the map 
new google.maps.StreetViewPanorama(document.getElementById('pano'),  
panoramaOptions); 

//this is the loop that will creat the marker 
for (index in markers) addMarker(markers[index]); 
function addMarker(data) { 
    // Create the marker 
    var marker = new google.maps.Marker({ 
    position: new google.maps.LatLng(data.lat, data.lng), 
    map: map, 
    label: labels[labelIndex++ % labels.length], 
    title: data.name 
    }); 

} 

} 

google.maps.event.addDomListener(window, 'load', initialize); 

</script> 
</head> 
<body> 
<div id="map-excel" style="width: 60%; height: 100%;float:left"></div> 
<div id="pano" style="width: 40%; height: 50%;float:right"></div> 
<div id="map-canvas" style="width: 40%; height: 50%;float:right"></div> 

</body> 
</html> 
+0

你要什么标题街景点?你的标记在哪里点击听众? – geocodezip

回答

3
  1. 保持于全景的引用:
// Set the initial Street View camera to the center of the map 
new google.maps.StreetViewPanorama(document.getElementById('pano'), panoramaOptions); 

应该是:

// Set the initial Street View camera to the center of the map 
panorama = new google.maps.StreetViewPanorama(document.getElementById('pano'), panoramaOptions); 
  1. 更改点击侦听器中panorama的位置。
google.maps.event.addListener(marker,'click', function(e) { 
    pano.setPosition(marker.getPosition()); 
}); 

proof of concept fiddle

代码片段:

var labels = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; //me 
 
var labelIndex = 0; //me 
 
var map; 
 
var panorama; 
 

 
//this will be created from server side 
 

 
var markers = [{ 
 
    lat: 39.976784, 
 
    lng: -75.234347, 
 
    name: "marker 1" 
 
}, { 
 
    lat: 39.977043, 
 
    lng: -75.235087, 
 
    name: "marker 2" 
 
}, { 
 
    lat: 39.976097, 
 
    lng: -75.234508, 
 
    name: "marker 3" 
 
}, { 
 
    lat: 39.977059, 
 
    lng: -75.233682, 
 
    name: "marker 4" 
 
}]; 
 
var myLatlng = new google.maps.LatLng(markers[0].lat, markers[0].lng); 
 

 

 
function initialize() { 
 
    //var sv = new google.maps.StreetViewService(); 
 
    panorama = new google.maps.StreetViewPanorama(document.getElementById('pano')); 
 

 

 
    var mapOptions = { 
 
    zoom: 16, 
 
    center: myLatlng 
 
    } 
 
    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 
 
    var panoramaOptions = { 
 

 
    navigationControl: true, 
 
    position: myLatlng, 
 
    //pov: { 
 
    //heading: 34, 
 
    //pitch: 10 
 
    //} 
 
    }; 
 
    // Set the initial Street View camera to the center of the map 
 
    pano = new google.maps.StreetViewPanorama(document.getElementById('pano'), 
 
    panoramaOptions); 
 

 
    //this is the loop that will creat the marker 
 
    for (var index in markers) addMarker(markers[index]); 
 

 
    function addMarker(data) { 
 
    // Create the marker 
 
    var marker = new google.maps.Marker({ 
 
     position: new google.maps.LatLng(data.lat, data.lng), 
 
     map: map, 
 
     label: labels[labelIndex++ % labels.length], 
 
     title: data.name 
 
    }); 
 
    google.maps.event.addListener(marker, 'click', function(e) { 
 
     pano.setPosition(marker.getPosition()); 
 
    }); 
 
    } 
 

 
} 
 

 
google.maps.event.addDomListener(window, 'load', initialize);
html, 
 
body, 
 
#map-canvas { 
 
    height: 100%; 
 
    margin: 0; 
 
    padding: 0; 
 
}
<script src="https://maps.googleapis.com/maps/api/js"></script> 
 
<div id="map-excel" style="width: 60%; height: 100%;float:left"></div> 
 
<div id="pano" style="width: 40%; height: 50%;float:right"></div> 
 
<div id="map-canvas" style="width: 40%; height: 50%;float:right"></div>

-1

//包含此代码到你的循环

var infowindow = new google.maps.InfoWindow({ 
    content: 'info content' 
}); 
google.maps.event.addListener(marker, 'click', function() { 
    infowindow.open(map,marker); 
}); 
+0

这与我的问题没有直接关系,但非常感谢您的快速响应。 – user3121922

0

在你这里的功能(功能(数据){...})(数据);因为您使用数组标记。

function addMarker(data) { 
    (function(data){ <<-- New line added 
    // Create the marker 
    var marker = new google.maps.Marker({ 
    position: new google.maps.LatLng(data.lat, data.lng), 
    map: map, 
    label: labels[labelIndex++ % labels.length], 
    title: data.name 
    }); 

    google.maps.event.addListener(marker, 'click', function(){// <<---- New line added 
     // Code event listener .... 
    });// <<---- New line added 

    })(data); // <<---- New line added 
} 

视图多个示例这里:https://developers.google.com/maps/documentation/javascript/examples/infowindow-simple

+0

非常感谢。你的方法也可以。但geozipcode更好,更干净。这是我如何拉它。 google.maps.event.addListener(标记, '点击',函数(){ \t \t \t变种panoramaOptions = {\t \t \t \t \t位置:新google.maps.LatLng(data.lat,data.lng) \t \t \t} \t \t \t new google.maps.StreetViewPanorama(document.getElementById('pano'),panoramaOptions); – user3121922