Построение значений тепловой карты

0

Я пытаюсь построить точки для карты тепла с помощью API Карт Google. Я извлекаю данные из своего CSV файла и форматируя его в массив просто отлично. Однако карта просто не загружается. У меня есть другое решение, в котором я использовал жестко кодированные данные, для которых он отлично работает.

Данные поступают в виде:

Latitude,Longitude,Weighting
data1,data2,data3,
data1,data2,data3,
.....etc

Theres около 150 пунктов к сюжету.

Я думаю, что проблема заключается в правильном вызове функции. Первоначально у меня было:

google.maps.event.addDomListener(window, 'load', createMap); 

line, но функция вызывается из моей функции AJAX, поэтому я не думал, что мне это нужно больше.

Правильно ли я отклоняю эту строку или это даже проблема?

благодаря

Код:

<!DOCTYPE html>
<html>
<head>
<title>Data Extraction</title>
<script type="text/javascript" src="jquerymobile/jquery-1.4.3.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/jsv=3.exp&sensor=true&libraries=visualization"></script>
<script type="text/javascript">


$(document).ready(function() {
$.ajax({
    type: "GET",
    url: "http://localhost/September2GData.csv",
    dataType: "text",
    success: function(data) {processData(data);},
    complete: function() {createMap();}
 });
});

var lines = [];

function processData(allText) {

var allTextLines = allText.split(/\r\n|\n/);
var headers = allTextLines[0].split(',');

for (var i=1; i<allTextLines.length; i++) {
    var data = allTextLines[i].split(',');
    if (data.length == headers.length) {
        var tarr = [];
        for (var j=0; j<headers.length; j++) {
            tarr.push(data[j]);
            lines.push(tarr[j])
        }
    }
   }
 }

 function createMap(){

var map;

var dataPoint1 = parseFloat(lines[0]);
var dataPoint2 = parseFloat(lines[1]);

var heatMapData = [
    new google.maps.LatLng(dataPoint1, dataPoint2)
];

var mapOptions = {
    center: new google.maps.LatLng(dataPoint1, dataPoint2),
    zoom: 8,
    mapTypeId: google.maps.MapTypeId.ROADMAP
    };

map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);

var heatMap = new google.maps.visualization.HeatmapLayer(heatMapData);
heatMap.setMap(map);

alert("Finished");
}


</script>
</head>
<body>
<div id="map-canvas"></div>
</body>
</html>
  • 0
    Как выглядят ваши данные? У вас есть образец, который вы можете опубликовать или ссылку?
  • 0
    Сейчас я отредактирую основной раздел, чтобы включить формат данных. Спасибо
Теги:
google-maps-api-3

1 ответ

0
Лучший ответ

Проблема заключается в том, что он сначала создает карту перед тем, как processData имеет возможность завершить или, по крайней мере, createMap и processData в более или менее одинаковое время. Я предлагаю использовать обратный вызов, чтобы processData lines для createMap после завершения обработки.

$(document).ready(function() {
  $.ajax({
    type: "GET",
    url: "http://localhost/September2GData.csv",
    dataType: "text",
    success: function(data) {
      processData(data, function (lines) {
        createMap(lines);
      });
    }
  });
});

function processData(allText, callback) {
  var lines = [];
  // code for lines
  callback(lines);
}

function createMap(lines) {
  // code
}
  • 0
    Привет Энди. Я внес ваши изменения там, и карта все еще не загружается. Я проверил, чтобы убедиться, что функция createMap все еще вызывается, но карта не отображается.
  • 0
    Вы убедились, что используете CSS для добавления высоты и ширины к # map-canvas? И вы уверены, что данные на самом деле загружаются?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню