2012-03-28 113 views
0

我有一张地图,我试图从数据库中拉出标记点,然后创建一个数组,然后使用该数组绘制地图上的每个纬度和经度点。现在我在这里尝试了一些东西,但是,当我测试它时,我只在地图上看到一点,而在亚洲则是这样,实际上经度和纬度都指向宾夕法尼亚州。我认为它只是将所有信息打包到数组中并试图进行绘图,但我不确定。真的卡在这里任何帮助,将不胜感激。从数据库创建Ajax结果的Javascript数组

<script type="text/javascript"> 
    $(function() { 
     var arraddress = new Array(); 
     $.ajax({ 
      url: 'http://example.com/22/www/ba.php', 
      data: '', 
      dataType: 'json', 
      success: function (data) { 
       $.each(data, function (key, val) { 

        var lng = val['lng']; 
        var lat = val['lat']; 
        var id = val['id']; 
        var state = val['state']; 

        arraddress[key] = lat + ":" + lng + ":" + state + ":" + id; 

        //Set up the map 
        var APIKEY = "ed24c9065bb55c1090d3d76e7ab8577e"; 
        var cloudmade = new CM.Tiles.CloudMade.Web({ 
         key: APIKEY 
        }); 
        var map = new CM.Map('mapdiv', cloudmade); 
        map.setCenter(new CM.LatLng(39.9, -98.5), 4); 

        //Add the markers from the array 
        var arLen = arraddress.length; 
        for (var i = 0, len = arLen; i < len; ++i) { 
         var onMarker = arraddress[i]; 
         var dat = arraddress[i].split(":"); 
         var mlat = dat[0]; 
         var mlon = dat[1]; 
         var mName = dat[2]; 

         var thisMarker = new CM.Marker(new CM.LatLng(mlon, mlat), { 
          title: state 
         }) 
         map.addOverlay(thisMarker); 
        } 
       }) 

      } 
     }); 
    }); 

    } 
</script> 

回答

2

Cloud Made documentation

构造
CM.LatLng(纬度,经度 ,无界?)

说明

创建一个对象CM.LatLng(通知 那纬度第一)。默认情况下,经度在-180到180之间被包裹为 ,并且纬度被限制在〜-85和 之间85.如果无界设置为true,它会保留lat./long。我

纬度至上的构造函数,但你有编码:

new CM.LatLng(mlon, mlat) 

这可能是南辕北辙。

此外,您在每次调用时都会执行大量设置代码,这将对数组中的每个元素进行触发。这是有道理的做你的“设置地图”代码后

success: function (data) { 

但在此之前

$.each(data, function (key, val) { 

编辑

再次在你的代码看,如果我读它的权利,你可以将你的成功功能剥离到

  success: function (data) { 

       var APIKEY = "ANONYMISED_KEY"; 
       var cloudmade = new CM.Tiles.CloudMade.Web({ 
         key: APIKEY 
       }); 
       var map = new CM.Map('mapdiv', cloudmade); 
       map.setCenter(new CM.LatLng(39.9, -98.5), 4); 

       $.each(data, function (key, val) { 

        map.addOverlay( 
          new CM.Marker(new CM.LatLng(val['lng'], val['lat']), { 
          title: val['state'] 
         })); 

       }) 

      } 

在发布代码时,您可能想匿名化您的API密钥。