使用大量地址数据创建Google API热图

时间:2016-05-13 18:01:56

标签: javascript google-maps

我尝试使用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);
        }
    });
}

0 个答案:

没有答案