Google地图标记无法显示

时间:2012-03-06 17:05:32

标签: c# asp.net google-maps-api-3

我有一个使用asp .net中的代码构建的脚本。它运行正常,但只显示200个地图上的前11个标记。它会抛出错误,说'0'为空或不是第12个地址的对象。即使我删除了第12个地址后它仍然表现相同。数据库中的所有物理地址也是有效的。我有200个这样的地址。我正在使用 google map api v3 。在此先感谢您的帮助。这是我用来构建脚本的方法:

 private void MapScript(DataSet ds)
    {
        StringBuilder sb = new StringBuilder();
        string itemList = string.Empty;
        foreach (DataRow r in ds.Tables[0].Rows)
        {
            // bypass empty rows        
            if (r["Address"].ToString().Trim().Length == 0)
                continue;
            sb = sb.Append("'" + r["Address"].ToString().Trim() + "',");               
        }
        if (sb.Length > 0)
        {
            itemList = sb.ToString().Substring(0, sb.ToString().Length - 1);
            itemList = itemList.Replace("\n", " ");
        }
        //script
        script.Text = @"<script type='text/javascript'>                            
                       window.onload = function() {  
                            var temp = [" + itemList + @"];
                            var latlng = new google.maps.LatLng(32.802955, -96.769923);  
                            var options = {  
                            zoom: 10,
                            center: latlng,
                            mapTypeId: google.maps.MapTypeId.ROADMAP
                            };  
                            var map = new google.maps.Map(document.getElementById('map_canvas'), options);      
                            var geocoder = new google.maps.Geocoder();

                            for (var i = 0; i < temp.length; i++) {
                            (function(address) {
                                geocoder.geocode({
                                    'address': address
                                }, function(results) {
                                    var marker = new google.maps.Marker({
                                        map: map,
                                        position: results[0].geometry.location,
                                        title: address
                                    });                                       
                                });
                            })(temp[i]);
                           }
                        }                           
                        </script> ";             
    }

1 个答案:

答案 0 :(得分:1)

您收到错误'0' is null or not an object,因为在尝试设置标记的位置属性之前,您没有检查请求的状态。就像@david所说,返回的状态可能是OVER_QUERY_LIMIT

这是我在测试期间处理此问题的方法。基本上,它检查返回的状态,如果状态超过限制,它将等待200毫秒并再次尝试。我只在测试环境中使用过这个,因为客户端有一个不受限制的高级帐户。 200毫秒似乎是现在的最佳点,但谷歌已经改变了过去一秒钟可以提出多少请求的限制。

Here is a fiddle of it working

function Geocode(address) {
    geocoder.geocode({
        'address': address
    }, function(results, status) {
        if (status === google.maps.GeocoderStatus.OK) {
            //update finished count so we know which markers are done.
            finishedCount++;
            UpdateProgress();
            var result = results[0].geometry.location;
            var marker = new google.maps.Marker({
                position: result,
                map: map
            });     
            bounds.extend(marker.position);
        } else if (status === google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {
            setTimeout(function(){
                //retry
                 Geocode(address);   
            }, 200);
        }else{
            alert("Geocode was not successful for the following reason: " 
                 + status);
        }
    });
}

function UpdateProgress(){          
     var progress = Math.round((finishedCount / citiesInTexas.length) * 100);
    $('#progress').text("percent done: " + progress);

    if(progress === 100)
        map.fitBounds(bounds);
}