Javascript 传单choropleth-geoJSON风格的颜色不显示,除非悬停
我正在使用geoJSON基本层和从Socrata API端点提取的JSON数据对多边形进行符号化,开发一个带有lapper.js的交互式choropleth地图。它基于所发布的传单.js choropleth示例 我被一个问题难住了——当我使用一个最初是JSON数据一部分的属性对geoJSON多边形进行着色(即设置其样式)时,例如在地图加载时弹出多边形颜色加载。但是,当我使用附加到geoJSON层的属性(例如estimate)设置geoJSON多边形的样式时,多边形颜色不会在地图加载时加载,仅在我将鼠标悬停在每个多边形上时才会显示。可以查看我的实时地图 这是相关代码,有人能看到我的问题吗?由于我对JavaScript的学习相对较新,我假设我缺少一些简单的语法或程序顺序规则,这些规则阻止传单贴图根据附加属性对多边形着色。我重新排列了代码的顺序,改变了很多东西,但一次又一次地得到相同的结果。非常感谢您帮助新手学习JavaScriptJavascript 传单choropleth-geoJSON风格的颜色不显示,除非悬停,javascript,leaflet,geojson,topojson,Javascript,Leaflet,Geojson,Topojson,我正在使用geoJSON基本层和从Socrata API端点提取的JSON数据对多边形进行符号化,开发一个带有lapper.js的交互式choropleth地图。它基于所发布的传单.js choropleth示例 我被一个问题难住了——当我使用一个最初是JSON数据一部分的属性对geoJSON多边形进行着色(即设置其样式)时,例如在地图加载时弹出多边形颜色加载。但是,当我使用附加到geoJSON层的属性(例如estimate)设置geoJSON多边形的样式时,多边形颜色不会在地图加载时加载,仅在
//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.
};