Javascript 谷歌地图:关于标记图标和地理编码的问题

Javascript 谷歌地图:关于标记图标和地理编码的问题,javascript,google-maps,Javascript,Google Maps,我创建了一个jsp,在这里我使用GoogleMaps中的geocoder类将地址转换成标记。现在我面临的唯一问题是,当我试图更改标记的图标图像时,我只得到所有标记的最后一个图标 <script type="text/javascript"> var geocoder; var address = new Array(); var marker = new Array(); var images=["A","B","C","D","E","F","G","H","I","J

我创建了一个jsp,在这里我使用GoogleMaps中的geocoder类将地址转换成标记。现在我面临的唯一问题是,当我试图更改标记的图标图像时,我只得到所有标记的最后一个图标

<script type="text/javascript">
var geocoder;  
var address = new Array();  
var marker = new Array();  
var images=["A","B","C","D","E","F","G","H","I","J","K","L"];  

function initialize()
{
var locations = new String("<%=request.getParameter("location")%>");  
locations=locations.substring(0,(locations.length)-1); 

var map = new google.maps.Map(document.getElementById('googleMap'), { 
   mapTypeId: google.maps.MapTypeId.ROADMAP,
   zoom: 8
});

if(locations=='null' || locations=='')
    locations = 'Pune, INDIA\;';

address = locations.split('\;');

marker[0] = new google.maps.Marker({
    map:map 
});

geocoder = new google.maps.Geocoder();
var i=1;
for(i=1; i<address.length; i++){
    geocoder.geocode({
          'address': address[i]+", India"
       },function(results, status){
          if(status == google.maps.GeocoderStatus.OK) {
            var marker = new google.maps.Marker({
                map: map,  
                icon: 'http://www.google.com/mapfiles/marker'+images[i]+'.png',
                position: results[0].geometry.location
            });
            var info = new google.maps.InfoWindow({
                content: address[i]+', India'
            });
            google.maps.event.addListener(marker, 'click', function() {
                info.open(map, marker);
            });
          }
       });
}
geocoder.geocode({
    'address': address[0]+", India"
    },function(results, status){
      if(status == google.maps.GeocoderStatus.OK) {
         marker[0].setPosition(results[0].geometry.location);
         map.setCenter(results[0].geometry.location);
         new google.maps.Circle({
             center: results[0].geometry.location,
             radius: radius * 1000,       // Convert to meters
             fillColor: '#00ff00',
             fillOpacity: 0.2,
             map: map,
             strokeColor : '#0000ff',
             strokeOpacity : 0.3,
             strokeWeight: 1
        });
     }
});
}//End of initialize function.  
google.maps.event.addDomListener(window, 'load', initialize);
</script>

var地理编码器;
var address=新数组();
var marker=新数组();
var图像=[“A”、“B”、“C”、“D”、“E”、“F”、“G”、“H”、“I”、“J”、“K”、“L”];
函数初始化()
{
变量位置=新字符串(“”);
位置=位置.子字符串(0,(位置.长度)-1);
var map=new google.maps.map(document.getElementById('googleMap'),{
mapTypeId:google.maps.mapTypeId.ROADMAP,
缩放:8
});
如果(位置=='null'| |位置=='')
地点='印度浦那\;';
地址=位置。拆分(“\;”);
marker[0]=新的google.maps.marker({
地图:地图
});
geocoder=新的google.maps.geocoder();
var i=1;
对于(i=1;i这是一个常见问题(通常在infowindows中遇到),可以通过函数闭包来解决(一个选项是“createMarker”函数)

在循环中调用它,如下所示:

geocoder.geocode({
      'address': address[i]+", India"
   },function(results, status){
      if(status == google.maps.GeocoderStatus.OK) {
        var marker = createMarker(results[0].geometry.location, address[i], images[i]);
      }
   });
(您发布的代码的行为与您描述的不同,还包括地理编码操作的函数闭包)

更新: 您还需要对地址关闭函数(“geocodeAddress”函数):

因此,您的处理循环变为:

var i=1;
for(i=0; i<address.length; i++){
  geocodeAddress(map, address[i], i);
}

这是一个常见问题(通常在infowindows中遇到),可以通过函数闭包来解决(“createMarker”函数是一个选项)

在循环中调用它,如下所示:

geocoder.geocode({
      'address': address[i]+", India"
   },function(results, status){
      if(status == google.maps.GeocoderStatus.OK) {
        var marker = createMarker(results[0].geometry.location, address[i], images[i]);
      }
   });
(您发布的代码的行为与您描述的不同,还包括地理编码操作的函数闭包)

更新: 您还需要对地址关闭函数(“geocodeAddress”函数):

因此,您的处理循环变为:

var i=1;
for(i=0; i<address.length; i++){
  geocodeAddress(map, address[i], i);
}


现在一个新参数“map”被发送到createMaker,我们是否应该更改createMarker()的声明?我尝试过使用这个参数,但它似乎不起作用:(是的。很抱歉,从未从版本更新帖子中的代码。既然新参数“map”正在发送给createMaker,我们是否应该更改createMarker()的声明?我尝试过使用此参数,但似乎无法工作:(是的。很抱歉,从未从版本更新帖子中的代码。