2012-03-28 2 views
0

У меня есть карта, я пытаюсь вытащить маркерные точки из своей базы данных и создать массив, а затем использовать этот массив для построения каждой точки широты и долготы на карте. Теперь я пробовал несколько вещей здесь, но, но всякий раз, когда я проверяю это, я просто получаю одну точку на карте и ее, как в Азии, когда на самом деле долгота и широта указывают на Пенсильванию. Я думаю, что это просто упаковка всей информации в массив и попытка заговора, но я не уверен. На самом деле здесь любая помощь была бы оценена.Создание массива Javascript из ajax результатов из базы данных

<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. как я

Latitude приходит первым в конструкторе, но вы закодировали:

new CM.LatLng(mlon, mlat) 

который, вероятно, неправильно наоборот.

Также вы делаете много кода установки для каждого вызова, который будет запускаться для каждого элемента вашего массива. Это имеет смысл сделать свой «Настройка карты» код после

success: function (data) { 

но перед

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

EDIT

Глядя на ваш код еще раз, если я прав читать это вам может лишить его вашей функции успеха до

  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 при отправке кода.

Смежные вопросы