Javascript 谷歌地图不同颜色标记不起作用

Javascript 谷歌地图不同颜色标记不起作用,javascript,jquery,google-maps,google-geocoder,google-geocoding-api,Javascript,Jquery,Google Maps,Google Geocoder,Google Geocoding Api,在我的项目中,我使用GoogleGeometryLocationAPI在地图上使用站点名称而不是纬度和经度显示标记。它工作得很好。现在,我想在数据库字段resp上为不同的站点显示不同的标记。如果resp大于50,则标记为红色,如果小于50,则标记为绿色。我按照下面的代码进行了尝试。但它显示全绿色或全红色。如果resp的第一个值低于50,则所有标记均为绿色;如果第一个值大于50,则所有标记均为红色。如何将标记动态显示为resp的值?请帮帮我。我的代码是 <script> $(docum

在我的项目中,我使用GoogleGeometryLocationAPI在地图上使用站点名称而不是纬度和经度显示标记。它工作得很好。现在,我想在数据库字段resp上为不同的站点显示不同的标记。如果resp大于50,则标记为红色,如果小于50,则标记为绿色。我按照下面的代码进行了尝试。但它显示全绿色或全红色。如果resp的第一个值低于50,则所有标记均为绿色;如果第一个值大于50,则所有标记均为红色。如何将标记动态显示为resp的值?请帮帮我。我的代码是

<script>
$(document).ready(function () {
var map;
var elevator;
var myOptions = {
    zoom: 4,
    center: new google.maps.LatLng(39.639537564366684, -97.03125),
    mapTypeId: 'terrain'
};
map = new google.maps.Map($('#map')[0], myOptions);

var addresses = [<?php $numItems = count($val); $i=0; foreach($val as $data){ echo "['".$data['name']."','".$data['resp']."']"; if(++$i !== $numItems) {echo ",";}}?>];
//var colordot =[];
//alert(addresses);
for (var x = 0; x < addresses.length; x++) {
//alert(addresses[x][1]);

if (addresses[x][1] >= 50) {

                 var img= 'img/red-dot.png';
            }
            else{
                var img= 'img/green-dot.png';
            }
            //alert(colordot[x]);
    $.getJSON('http://maps.googleapis.com/maps/api/geocode/json?address='+addresses[x][0]+'&sensor=false', null, function (data) {
        var p = data.results[0].geometry.location
        var latlng = new google.maps.LatLng(p.lat, p.lng);
        new google.maps.Marker({

                icon: img,

            position: latlng,
            map: map
        });

    });
}

});
</script>

$(文档).ready(函数(){
var映射;
无功电梯;
变量myOptions={
缩放:4,
中心:新google.maps.LatLng(39.639537564366684,-97.03125),
mapTypeId:'地形'
};
map=new google.maps.map($('#map')[0],myOptions);

var addresses=[解决此问题的一种方法是在geocoder调用中的
img
变量上使用函数闭包:

$.getJSON('http://maps.googleapis.com/maps/api/geocode/json?address=' + addresses[x][0] + '&sensor=false', null, function(img) {
  return function(data) {
    var p = data.results[0].geometry.location
    var latlng = new google.maps.LatLng(p.lat, p.lng);
    new google.maps.Marker({
     icon: img,
     position: latlng,
      map: map
    });

  }
}(img));

代码片段:

$(文档).ready(函数(){
var映射;
无功电梯;
变量myOptions={
缩放:4,
中心:新google.maps.LatLng(39.639537564366684,-97.03125),
mapTypeId:'地形'
};
map=new google.maps.map($('#map')[0],myOptions);
变量地址=[
[“纽约,纽约”,1],
[“马萨诸塞州波士顿”,75]
];
对于(var x=0;x=50){
var img=http://maps.google.com/mapfiles/ms/micons/red.png';
}否则{
var img=http://maps.google.com/mapfiles/ms/micons/green.png';
}
$.getJSON('http://maps.googleapis.com/maps/api/geocode/json?address=“+地址[x][0]+”&传感器=false',null,函数(img){
返回函数(数据){
var p=data.results[0]。geometry.location
var latlng=新的google.maps.latlng(p.lat,p.lng);
新的google.maps.Marker({
图标:img,
位置:latlng,
地图:地图
});
}
}(img)).fail(函数(jqxhr、textStatus、error){
var err=textStatus+“,”+错误;
log(“请求失败:+err”);
});;
}
});
html,
身体,
#地图{
身高:100%;
宽度:100%;
边际:0px;
填充:0px
}

我在异步地理编码方面也遇到了类似的问题,我最终用这种方法解决了这个问题

你可以试试:

    var marker = new google.maps.Marker({

            icon: img,

        position: latlng,
        map: map
    });

$.getJSON('http://maps.googleapis.com/maps/api/geocode/json?address='+addresses[x][0]+'&sensor=false', null, function (data) {
    var p = data.results[0].geometry.location
    var latlng = new google.maps.LatLng(p.lat, p.lng);

    this.position = latlng;
    this.icon = img;

}.bind(marker));

这可能是因为你不知道如何处理异步代码。当getJSON启动时,img将是getJSON回调中所有标记的上一次迭代中的任何东西。你能帮我解决它吗?你需要一个关于var img的闭包,某种形式的…IILife现在很常见,如果我没有,我如何添加集群上述代码中有两个同名标记?这是另一个问题。是的……我如何在上述代码中进行此操作?请帮助我。正如我所说的,这是另一个/新问题,它不属于此问题的注释。因为它不是很清楚,“两个同名标记”是什么?