Пока я следую за tutorial on choropleth maps in Leaflet, я понял, что преобразование Shapefile> GeoJSON генерирует очень большой файл. TopoJSON оказалась лучшей альтернативой, за исключением того, что не удалось получить доступ к свойствам для каждой геометрии. Я слился данные из https://github.com/centraldedados/violencia-domestica в TopoJSON file converted from a Shapefile, структурирована следующим образом:TopoJSON in Leaflet, через Omnivore: свойства чтения
{
"transform": {
"scale": [
0.0025081552497290688,
0.0012125352320998587
],
"translate": [
-31.26818656921381,
30.03017616271984
]
},
"objects": {"PRT_adm1": {
"geometries": [
{
"type": "Polygon",
"arcs": [[
0,
1,
2,
3,
4
]],
"properties": {
"ENGTYPE_1": "District",
"ISO": "PRT",
"NL_NAME_1": null,
"HASC_1": "PT.EV",
"ID_0": 182,
"NAME_0": "Portugal",
"TYPE_1": "Distrito",
"ID_1": 1,
"NAME_1": "Évora",
"CCN_1": 0,
"CCA_1": null,
"dgai_violencia_domestica_2008_2014": {
"Valores": [
{
"Ano": "2009",
"Entidade": [
{"GNR": "216"},
{"PSP": "171"}
]
},
{
"Ano": "2010",
"Entidade": [
{"GNR": "247"},
{"PSP": "162"}
]
},
{
"Ano": "2011",
"Entidade": [
{"GNR": "248"},
{"PSP": "181"}
]
},
{
"Ano": "2012",
"Entidade": [
{"GNR": "277"},
{"PSP": "150"}
]
},
{
"Ano": "2013",
"Entidade": [
{"GNR": "207"},
{"PSP": "169"}
]
},
{
"Ano": "2014",
"Entidade": [
{"GNR": "226"},
{"PSP": "137"}
]
}
],
"Distrito": "Évora",
"Factor_amostra": 0.020521270111203194,
"Somatorio_amostra": 2391
},
"VARNAME_1": null
}
},
...
и хотели бы получить доступ к свойству «dgai_violencia_domestica_2008_2014.Factor_amostra» каждого объекта, таким образом, чтобы закодировать значение цвета.
Возможно ли это с Листовкой + Омнивором, или нужна ли d3 или другая библиотека?
тока, сломанный версия карты живет here, с соответствующим кодом существа:
L.mapbox.accessToken = '...';
var map = L.mapbox.map('map', 'mapbox.streets').setView([39.5, -8.60], 7);
// Omnivore will AJAX-request this file behind the scenes and parse it:
// note that there are considerations:
// - The file must either be on the same domain as the page that requests it,
// or both the server it is requested from and the user's browser must
// support CORS.
// Internally this function uses the TopoJSON library to decode the given file
// into GeoJSON.
function getColor(d) {
return d > 0.75 ? '#800026' :
d > 0.50 ? '#FC4E2A' :
d > 0.25 ? '#FD8D3C' :
'#FFEDA0';
}
var pt = omnivore.topojson('dgai_violencia_domestica_2008_2014.topo.json');
function style(geometry) {
return {
fillColor: getColor(geometry.properties.dgai_violencia_domestica_2008_2014.Peso_na_duracao_da_amostra),
weight: 1,
opacity: 1,
color: 'white',
dashArray: '3',
fillOpacity: 1
};
}
pt.setStyle(style);
pt.addTo(map);
толчок в правильном направлении, любой?
Заранее спасибо.
Это сделал. Я написал эскиз обработки, чтобы собрать все строки в исходном наборе данных, ссылаясь на районы на json-объекты, а затем сопоставить их с именами в файле TopoJSON. в его нынешнем виде совпадение имен недостаточно устойчиво. Спасибо. – bcsantos
Посмотрите на использование topojson.js, поскольку он преобразует GeometryCollection обратно в FeatureCollection, чтобы вы могли использовать клавиши features.properties. Я не делал этого, так как в настоящее время я пытаюсь понять это на своем конце. – redshift