传单将数组中每个点的坐标

时间:2019-05-24 17:26:18

标签: javascript leaflet

我使用GeoJSON.AJAX获取点,我想将坐标存储在数组中,以便稍后将其传递给在点之间构建路线的函数。现在我使用这段代码

<script>
    function our_layers(map){

    var coords = []; //array to store coordinates
    var points = new L.GeoJSON.AJAX("{% url 'incidences' %}",{

        onEachFeature: function (feature, layer) {
            layer.bindPopup(a lot of code here);

            x = feature.geometry.coordinates
            coords.push(x);//here I add coordinates to array
        }
    });
    points.addTo(map);

    //there is button "getcoords" I created to test some things
    document.getElementById("getcoords").addEventListener("click", logCoords);

    function logCoords() {
         console.log("Test " + coords);
     }

</script>
{% leaflet_map "gis" callback="window.our_layers" %}

那样,它可以完美工作,但是很明显,我需要在不按下按钮的情况下获得coords数组。但是,如果尝试将concole.log(coords)放在points.addTo(map)之后,则会返回空数组。我猜这是因为它需要一些时间来计算(因为如果刷新页面后立即按下按钮,我也会得到空数组)。推完坐标后没有设置超时时间,有什么办法可以立即打印数组? 我也尝试过

        function drawPoints(p, callback) {
                    p.addTo(map);
                    callback()
                }
        function logCoords() {
                    console.log("Test " + coords);
                }

        drawPoints(points, logCoords);

但是它仍然给我空数组。因此,有没有办法在不设置超时的情况下获取我的阵列?

1 个答案:

答案 0 :(得分:0)

解决方案是

points.on('data:loaded', function () {
            points.addTo(map);
            logCoords();
        });