我尝试使用Google的API创建热图,但遇到了一些问题。到目前为止,我遇到的主要问题是将大约约25000个地址转换为地理坐标以便在API中使用。我使用的两种方法是谷歌自己的API,它有很大的局限性,以及Python的Geopy模块,它也有局限性。由于我试图转换~25000,Geopy的一秒延迟是一个相当陡峭的问题。
我能看到的第二个问题是尺寸限制。一旦我有了大约25000个地理坐标的列表,将它们放入Javascript中的数组似乎很荒谬。假设用户将以如下格式上传文本文件:
12.3456,-12.3456
23.4567,-23.4567
...
是否有办法以块或其他方式处理文件?
如果有帮助,这是我当前用于处理地址文件的Javascript代码。我计划更改文件读取格式以找到更好的系统。
var map, heatmap, geocoder;
var MVCarr;
function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: 36.85, lng: -75.97},
zoom: 7
});
MVCarr = new google.maps.MVCArray();
heatmap = new google.maps.visualization.HeatmapLayer({
data: MVCarr,
map: map
})
}
window.onload = function() {
var fileInput = document.getElementById('fileInput');
var fileDisplayArea = document.getElementById('fileDisplayArea');
geocoder = new google.maps.Geocoder();
fileInput.addEventListener('change', function(e) {
var file = fileInput.files[0];
var reader = new FileReader();
reader.onload = function(e) {
var mySplit = (reader.result).split("\n");
for(var i = 0, len = mySplit.length; i < len; i++) {
//console.log(mySplit[i]);
geocodeAddress(geocoder, mySplit[i]);
}
}
reader.readAsText(file);
});
}
function geocodeAddress(geocoder, address) {
geocoder.geocode({'address': address}, function(results, status) {
if (status === google.maps.GeocoderStatus.OK) {
MVCarr.push(results[0].geometry.location);
console.log(MVCarr.length);
} else {
console.log('Failed: ' + status);
}
});
}