Есть много разных подходов к проблеме. То, что я собираюсь описать, - это только один из них.
Во-первых, я собираюсь использовать последние доступные версии листовка:
<link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css" />
<script src="https://unpkg.com/[email protected]/dist/leaflet.js"></script>
И только один Heatmap плагин. На земле нет причин, почему вам нужно использовать два плагина для плагинов одновременно.
<script src="https://unpkg.com/[email protected]/dist/leaflet-heat.js"></script>
Вперед reading the contents of a text file into a JS variable. Есть несколько способов, но я особенно любил fetch
API:
fetch('http://something/something/data.csv').then(function(response){
return response.text();
}).then(function(text){
// Handling of the text contents goes here
}).catch(function(err){
// Error handling goes here (e.g. the network request failed, etc)
})
Разделить текст на строки ...
var lines = text.split("\n");
... перебирать строки, кроме первой. ..
for (var i=1; i<lines.length; i++) {
... разделить строку в разделенных запятой части (в данном случае, разделенная точка с запятой); Я предполагаю, что тривиальное формат CSV (things can get a bit more complicated with some CSV files) ...
var parts = lines[i].split(";");
... получить данные, которые вы хотите показать на тепловой карты, в том виде, который heatmap plugin понравится, имея в виду, что parts
является 0-индексированная матрица ...
var heatData = []
for(...){
...
// heatData.push(lat, lng, weight)
heatData.push([ parts[4], parts[5], parts[3] ])
...и после того, как цикл по линиям снова и heatData
готов, инициализировать Heatmap:
var heat = L.heatLayer(heatData, {radius: 25}).addTo(map);
И все это вместе:
var map = new L.Map('map').fitWorld();
var positron = L.tileLayer('http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png', {
attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, © <a href="http://cartodb.com/attributions">CartoDB</a>'
}).addTo(map);
// I'll just ignore the network request and fake some data.
// fetch('http://something/something/data.csv').then(function(response){
// return response.text();
// }).then(function(text){
text = "id;Código postal;Localidad;Valoracion;lat;lng\n1;46100;Burjassot;8;39.51;-0.425055\n2;18005;Granada;7;37.169266;-3.597161";
var lines = text.split("\n");
var heatData = [];
for (var i=1; i<lines.length; i++) {
var parts = lines[i].split(";");
heatData.push([ parts[4], parts[5], parts[3] ]);
}
var heat = L.heatLayer(heatData, {radius: 25}).addTo(map);
// }).catch(function(err){
// // Error handling for the fetch goes here (e.g. the network request failed, etc)
// })
См working example here.
Пожалуйста, не слепо скопируйте-вставьте код. Каждый раз, когда вы копируете-вставляете код, боги stackoverflow убивают котенка, а кто-то готовит рис с горохом и рыбой на нем и называет его паэлья. Подумайте о котятах. И паэлья.
Пожалуйста, обратите внимание, что я расколоть проблема несколько, небольшие проблемы:
- Выберите правильные инструменты (листовка версия, реализация Heatmap)
- Чтение текстового файла (выборки/Ajax/XHR/и т.д.)
- Разбирает CSV (разделенные строки из файла, и поля образуют строки)
- Создать структуру данных для тепловой карты (петли, выбор поля)
В зависимости от вашего конкретного сценария вам может потребоваться изменить любую из этих небольших проблем.
Если бы вы могли скопировать вставить первые несколько строк из вашего файла CSV, которые помогут. – IvanSanchez