我正在尝试使用Google Maps API绘制热图的点数。我正在从CSV文件中提取数据并将其格式化为数组。但是地图不会加载。我有另一个解决方案,我使用硬编码数据,它工作正常。
数据的形式为:
Latitude,Longitude,Weighting
data1,data2,data3,
data1,data2,data3,
.....etc
Theres约有150分的情节。
我认为问题与正确调用函数有关。本来我有一个:
google.maps.event.addDomListener(window, 'load', createMap);
但是从我的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)
问题在于它在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
}