Медленно подгружаются полигоны geoJSON на карту leafletjs
есть карта сделанная на leafletjs, задача состояла в том, чтобы выделить определенные регионы. Выделение я сделал используя полигоны которые получаю из geoJSON. Одной из значимых проблем в моей реализации оказалась медленная скорость подгрузки полигонов, а значит на карте они отображаются только через несколько секунд (каждая). Как сделать более быструю подгрузку полигонов?
Выполните код чтобы "прочувствовать" все самим :)
let map = new L.Map('map', {
layers: new L.TileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}'),
center: new L.LatLng(33.309731, -35.976059),
zoom: 1.5,
minZoom: 1.5,
maxZoom: 2
});
function doFetch(url, settings) {
fetch(url)
.then(function(response) {
return response.json();
})
.then(function(json) {
json.features = json.features.filter(f => f.geometry.type !== "Point");
L.geoJSON(json, settings).addTo(map);
});
}
function LowCoV(geoJsonData) {
let polygonSettings = {
fillColor: "#e00",
color: "#f00",
opacity: 1,
weight: 0.5,
fillOpacity: 0.2 // LOW
}
doFetch(geoJsonData, polygonSettings);
}
function MiddleCoV(geoJsonData) {
let polygonSettings = {
fillColor: "#e00",
color: "#f00",
opacity: 1,
weight: 0.5,
fillOpacity: 0.5 // MIDDLE
}
doFetch(geoJsonData, polygonSettings);
}
function HightCoV(geoJsonData) {
let polygonSettings = {
fillColor: "#e00",
color: "#f00",
opacity: 1,
weight: 0.5,
fillOpacity: 0.8 // HIGHT
}
doFetch(geoJsonData, polygonSettings);
}
LowCoV('https://nominatim.openstreetmap.org/search.php?q=Russia&polygon_geojson=1&format=geojson'); // Russia
LowCoV('https://nominatim.openstreetmap.org/search.php?q=Canada&polygon_geojson=1&format=geojson'); // Canada
LowCoV('https://nominatim.openstreetmap.org/search.php?q=Spain&polygon_geojson=1&format=geojson'); // Spain
LowCoV('https://nominatim.openstreetmap.org/search.php?q=France&polygon_geojson=1&format=geojson'); // France
LowCoV('https://nominatim.openstreetmap.org/search.php?q=Italy&polygon_geojson=1&format=geojson'); // Italy
LowCoV('https://nominatim.openstreetmap.org/search.php?q=India&polygon_geojson=1&format=geojson'); // India
LowCoV('https://nominatim.openstreetmap.org/search.php?q=Germany&polygon_geojson=1&format=geojson'); // Germany
MiddleCoV('https://nominatim.openstreetmap.org/search.php?q=Japan&polygon_geojson=1&format=geojson') // Japan
MiddleCoV('https://nominatim.openstreetmap.org/search.php?q=Australia&polygon_geojson=1&format=geojson'); // Australia
MiddleCoV('https://nominatim.openstreetmap.org/search.php?q=USA&polygon_geojson=1&format=geojson'); // USA
MiddleCov('https://nominatim.openstreetmap.org/search.php?q=Alaska&polygon_geojson=1&format=geojson'); // Alaska
body {
margin: 0;
overflow: hidden;
}
#map {
position: absolute;
width: 100%;
height: 100%;
}
<link rel="stylesheet" href="stylesheet.css">
<link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css" />
<script src="https://unpkg.com/[email protected]/dist/leaflet.js"></script>
<div id="map"></div>
<script src="main.js"></script>
Ссылка на codepen.io
Ответы (1 шт):
Слабая скорость запроса объяснялась тем что, эти запросы обрабатывались на волантерских серверах с маленькой мощностью и было ограничение 1 запрос в секунду. Nominatim usage. Решением было скачивание страниц с полигонами и обращения к ним локально