Javascript Google js api动态地为每个标记创建不同的标记图像

Javascript Google js api动态地为每个标记创建不同的标记图像,javascript,google-maps-api-3,Javascript,Google Maps Api 3,我使用以下js添加google地图,它从foreach循环中的数据库中提取我的所有位置,我希望每个标记都有一个不同的图标,该图标将存储在一个by字段中 比如说,我有一个名为filename的字段,它将存储图像路径/名称(icon.jpg) 我想知道我怎样才能改编这个由August Li编写的脚本来做到这一点 <script type="text/javascript"> //Sample code written by August Li

我使用以下js添加google地图,它从foreach循环中的数据库中提取我的所有位置,我希望每个标记都有一个不同的图标,该图标将存储在一个by字段中

比如说,我有一个名为filename的字段,它将存储图像路径/名称(icon.jpg)

我想知道我怎样才能改编这个由August Li编写的脚本来做到这一点

 <script type="text/javascript">
            //Sample code written by August Li
            var icon = new google.maps.MarkerImage("http://maps.google.com/mapfiles/ms/micons/blue.png",
                       new google.maps.Size(32, 32), new google.maps.Point(0, 0),
                       new google.maps.Point(16, 32));
            var center = null;
            var map = null;
            var currentPopup;
            var bounds = new google.maps.LatLngBounds();
            function addMarker(lat, lng, info) {
                var pt = new google.maps.LatLng(lat, lng);
                bounds.extend(pt);
                var marker = new google.maps.Marker({
                    position: pt,
                    icon: icon,
                    map: map
                });
                var popup = new google.maps.InfoWindow({
                    content: info,
                    maxWidth: 300
                });
                google.maps.event.addListener(marker, "click", function() {
                    if (currentPopup != null) {
                        currentPopup.close();
                        currentPopup = null;
                    }
                    popup.open(map, marker);
                    currentPopup = popup;
                });
                google.maps.event.addListener(popup, "closeclick", function() {
                    map.panTo(center);
                    currentPopup = null;
                });
            }           
            function initMap() {
                map = new google.maps.Map(document.getElementById("map"), {
                    center: new google.maps.LatLng(0, 0),
                    zoom: 14,
                    mapTypeId: google.maps.MapTypeId.ROADMAP,
                    mapTypeControl: true,
                    mapTypeControlOptions: {
                        style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR
                    },
                    navigationControl: true,
                    navigationControlOptions: {
                        style: google.maps.NavigationControlStyle.ZOOM_PAN
                    }
                });
<?php

foreach ($dataProvider->models as $model) {
    echo "addMarker({$model->lat}, {$model->lon}, '<b>$model->name</b><br />$model->website');";
}

?>
 center = bounds.getCenter();
     map.fitBounds(bounds);

     }
     </script>

//示例代码由August Li编写
var icon=new google.maps.MarkerImage(“http://maps.google.com/mapfiles/ms/micons/blue.png",
新的google.maps.Size(32,32),新的google.maps.Point(0,0),
新的google.maps.Point(16,32));
var中心=null;
var-map=null;
var-currentPopup;
var bounds=new google.maps.LatLngBounds();
功能添加标记(lat、lng、info){
var pt=新的google.maps.LatLng(lat,lng);
边界扩展(pt);
var marker=new google.maps.marker({
职位:pt,
图标:图标,
地图:地图
});
var popup=new google.maps.InfoWindow({
内容:信息,,
最大宽度:300
});
google.maps.event.addListener(标记“单击”,函数(){
如果(currentPopup!=null){
currentPopup.close();
currentPopup=null;
}
弹出。打开(地图、标记);
当前弹出=弹出;
});
google.maps.event.addListener(弹出窗口“closeclick”,函数(){
潘托地图(中);
currentPopup=null;
});
}           
函数initMap(){
map=new google.maps.map(document.getElementById(“map”){
中心:新google.maps.LatLng(0,0),
缩放:14,
mapTypeId:google.maps.mapTypeId.ROADMAP,
mapTypeControl:true,
mapTypeControlOptions:{
样式:google.maps.MapTypeControlStyle.HORIZONTAL\u栏
},
导航控制:对,
导航控制选项:{
样式:google.maps.NavigationControlStyle.ZOOM\u PAN
}
});

您只需要一个函数,如:

function makeIcon(filename) {
    return new google.maps.MarkerImage(
                   "http://example.com/path/to/icons/" + filename,
                   new google.maps.Size(32, 32), new google.maps.Point(0, 0),
                   new google.maps.Point(16, 32)
               );
}
当然更新了图标文件位置的路径

然后需要更新addMarker函数以接受图标参数:

        function addMarker(lat, lng, gicon, info) {
            var pt = new google.maps.LatLng(lat, lng);
            bounds.extend(pt);
            var marker = new google.maps.Marker({
                position: pt,
                icon: gicon,
                map: map
            });
            ...
然后在PHP循环中,需要单独添加makeIcon()调用

<?php
foreach ($dataProvider->models as $model) {
    echo "gicon = makeIcon(your filename);";
    echo "addMarker({$model->lat}, {$model->lon}, gicon, '<b>$model->name</b><br />$model->website');";
}
?>

谢谢,我会再试一次,但是当我使用addmarker(lat,lon,filename,info)时,地图仍然显示,但是没有添加标记,但是我会再试一次,只是想知道在我的for each循环中回显标记时是否有任何错误。我尝试了以下
echo”addmarker({$model->lat},{$model->lon},mapicon.jpg,'$model->name
$model->website');
但它只回显了mapicon.jpg,而不是原始答案基于Javascript方法。我修改了答案,以考虑到您在PHP循环中生成Javascript代码的事实。我如何调用变量gicon并在for each循环中执行js函数,因为它目前只是将其作为sting进行回显,所以我T只是在我的源代码中说GICON。PHP循环在一堆其他JS中间回响JavaScript代码,所以它只是动态地创建你需要发送给浏览器的JS代码。