Javascript 传单choropleth-geoJSON风格的颜色不显示,除非悬停

Javascript 传单choropleth-geoJSON风格的颜色不显示,除非悬停,javascript,leaflet,geojson,topojson,Javascript,Leaflet,Geojson,Topojson,我正在使用geoJSON基本层和从Socrata API端点提取的JSON数据对多边形进行符号化,开发一个带有lapper.js的交互式choropleth地图。它基于所发布的传单.js choropleth示例 我被一个问题难住了——当我使用一个最初是JSON数据一部分的属性对geoJSON多边形进行着色(即设置其样式)时,例如在地图加载时弹出多边形颜色加载。但是,当我使用附加到geoJSON层的属性(例如estimate)设置geoJSON多边形的样式时,多边形颜色不会在地图加载时加载,仅在

我正在使用geoJSON基本层和从Socrata API端点提取的JSON数据对多边形进行符号化,开发一个带有lapper.js的交互式choropleth地图。它基于所发布的传单.js choropleth示例

我被一个问题难住了——当我使用一个最初是JSON数据一部分的属性对geoJSON多边形进行着色(即设置其样式)时,例如在地图加载时弹出多边形颜色加载。但是,当我使用附加到geoJSON层的属性(例如estimate)设置geoJSON多边形的样式时,多边形颜色不会在地图加载时加载,仅在我将鼠标悬停在每个多边形上时才会显示。可以查看我的实时地图

这是相关代码,有人能看到我的问题吗?由于我对JavaScript的学习相对较新,我假设我缺少一些简单的语法或程序顺序规则,这些规则阻止传单贴图根据附加属性对多边形着色。我重新排列了代码的顺序,改变了很多东西,但一次又一次地得到相同的结果。非常感谢您帮助新手学习JavaScript

//Initiate geojson variable so listeners can access
var geojson;

//Add TopoJSON layer and append SODA data to symbolize polygons

//Use d3.js to pull in TopoJSON, convert to geoJSON, and add to Leaflet map
d3.json("hrabasetopo.json", function(error, topology) {
    var collection = topojson.feature(topology, topology.objects.layer1);
    var hraData = [collection];

    //Pull summary data from SODA

    //Variable to select desired indicator
    var where = "$where=indicator='uninsure'";
    //Variable to order HRA and zip by VID to match order of features in geoJSON base
    var order = "&$order=vid";
    //Variable to concatenate queries with URL
    var url = "http://data.kingcounty.gov/resource/ajpg-dges.json?"+where+order;
    //jQuery GET request to pull data from SODA and feed to callback function with geoJSON
    $.get(url, 
    function(soda) {
        //Output SODA JSON and hra base geoJSOn to external function
        symbolize(soda);
        }, 
    "json");    

    //Function to append SODA data to TopoJSON converted to geoJSON
    function symbolize(soda) {

         //Loop to copy all of SODA JSON properties to HRA base geoJSON
         for (var i = 0; i<hraData[0].features.length; i++) {
            hraData[0].features[i].properties.estimate = Number(soda[i].estimate);
        }
    };

    //Get color depending on selected estimate
    function getColor(d) {
        return d > 20.1 ? '#e31a1c' :
               d > 16.2 ? '#fd8d3c' :
               d > 11.3 ? '#fecc5c' :
                           '#ffffb2';
    }

    //Incorporate getColor function into overall style function for HRA layer
    function style(feature) {
        return {
            weight: 1,
            opacity: 1,
            color: 'white',
            dashArray: '5',
            fillOpacity: 0.8,
            fillColor: getColor(feature.properties.estimate)
        };
    }

    //Add hraData as geoJSON layer to Leaflet map
    geojson = L.geoJson(hraData, {
        style: style,
        onEachFeature: onEachFeature
    }).addTo(map);

})

我自己想出来的!学习JavaScript的一个挑战性方面是习惯异步程序流,因为我所使用的所有统计软件编码语言Stata、R、SAS等都使用同步编程。我这里的问题是,我没有强制传单.js映射等待加载,直到API端点的JSON数据被调用并附加到geoJSON层。解决方案是将map setup函数包装在一个名为mapSetup的大函数中,并使用jqXHR对象。done方法,如下代码所示:

    //jQuery GET request to pull data from SODA and feed to callback function with geoJSON
        $.get(url) 
            .done(function(soda) {
            //Output SODA JSON and hra base geoJSOn to external function
            symbolize(soda);        
            })
            .done(function() {
            mapSetup();
            }); 

    //Function to append SODA data to TopoJSON converted to geoJSON
    function symbolize(soda) {

        //Loop to copy all of SODA JSON properties to HRA base geoJSON
        for (var i = 0; i<hraData[0].features.length; i++) {
            hraData[0].features[i].properties.estimate = Number(soda[i].estimate);
        }
    };

        function mapSetup() {
        //Functions to add geoJSON to leaflet map, add controls, legends, etc.
        };