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