I. Обзор
Пятая статья получила один комментарий. нетизен@RackarСпросил, как правильно ввести Leaflet.markercluster.
На самом деле это не сложно, здесь мы кратко представим это.Leaflet.markerclusterПрименение.
чтоLeaflet.markercluster?
Студенты, имеющие опыт разработки географических информационных систем, должны быть знакомы с makecluster. До популярности технологии h5, чтобы улучшить эффект от отображения больших точечных данных на карте, распространенным методом было использование агрегации точек для улучшения взаимодействия с пользователем. Это функция, которую мы хотим получить, эффект показан на следующем рисунке:
Функция здесь реализована в проекте предыдущей статьи.
Во-вторых, реализация кода
1) представил Leaflet.markercluster
Перед официальным кодом обязательно внимательно его прочитайтеLeaflet.markerclusterофициальная документация. Затем все, что нужно сделать, это установить плагин в проект. В то же время обратите внимание на приведенное ниже описание файла, который является файлом, на который необходимо ссылаться в проекте.
Представлен в нашем проекте map.js
// src\utils\map.js
import "leaflet/dist/leaflet.css";
import $L from "leaflet";
// 引入 leaflet.markercluster
import "leaflet.markercluster/dist/MarkerCluster.css"
import "leaflet.markercluster/dist/MarkerCluster.Default.css"
import "leaflet.markercluster";
// 解决默认 maker 无法显示的问题
import icon from "leaflet/dist/images/marker-icon.png";
import iconShadow from "leaflet/dist/images/marker-shadow.png";
let DefaultIcon = $L.icon({
iconUrl: icon,
shadowUrl: iconShadow
});
$L.Marker.prototype.options.icon = DefaultIcon;
......
Обратите внимание, что он должен быть введенleafletПосле импортаleaflet.markercluster, иначе объект листовки не будет найден, и при этом нужный css файл будет полностью внедрен.
2) Использованиеleaflet.markercluster
После того, как введение завершено, пришло время его использовать. Обратитесь к примеру на официальном сайте, способ использования очень прост.
- Создайте экземпляр markerCluster. makerClusterGroup Настоящая гора — это слой;
- Добавьте баллы в makerClusterGroup;
- Загрузите makerClusterGroup в карту
(1) Создание экземпляра markerCluster
Добавьте метод для создания makerClusterGroup в map.js.
// src\utils\map.js
const createMakerCluster = () => {
return $L.markerClusterGroup();
};
После листовки. Группровая успешные ссылки, он будет установлен на объект нашего следующего сетевого представленного петтера.
(2) Добавить точку в MAKERCLUSTERGROUP
Чтобы получить лучший эффект отображения, здесь я добавляю случайную точку координат под видимым диапазоном текущей карты и передаюlatlng
Добавить кmarker
Методы:
// src\utils\map.js
const getRandomLatLng = map => {
let bounds = map.getBounds(),
southWest = bounds.getSouthWest(),
northEast = bounds.getNorthEast(),
lngSpan = northEast.lng - southWest.lng,
latSpan = northEast.lat - southWest.lat;
return $L.latLng(
southWest.lat + latSpan * Math.random(),
southWest.lng + lngSpan * Math.random()
);
};
const createMakerByLatlng = (latlng, options) => {
return $L.marker(latlng, options);
};
(3) Загрузите makerClusterGroup в карту
После того, как все вышеуказанные приготовления завершены, мы можем вызвать его в map.vue, где количество добавленных случайных точек равно 10000.
// src\views\Map.3.vue
<template>
<div class="map-container" id="map-container"></div>
</template>
<script>
export default {
name: "mapView",
components: {},
data() {
return {
map: null,
OSMUrl: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
};
},
mounted() {
this.map = this.$utils.map.createMap("map-container", {
maxZoom: 18
});
this.$utils.map.createTileLayer(this.map, this.OSMUrl, {});
this.map.setView([51.505, -0.09], 13);
let cluster = this.$utils.map.createMakerCluster();
for (let i = 0; i < 10000; i++) {
let latlng = this.$utils.map.getRandomLatLng(this.map);
let maker = this.$utils.map.createMakerByLatlng(latlng);
cluster.addLayer(maker);
}
this.map.addLayer(cluster);
}
};
</script>
<style lang="less">
.map-container {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
}
</style>
текущий результат:
При вызове map.vue объект карты вmaxZoomАтрибут обязателен, иначе будет выдано сообщение об ошибке при создании **makerClusterGroup**:
maxZoomРоль определяет максимальный уровень, до которого может быть увеличена точка агрегации. Посмотрите прямо на карту эффектовmaxZoomРазница в размерах:
maxZoom = 8, при увеличении карты до максимального уровня эффект нажатия на точку агрегации следующий:
maxZoom = 18, при максимальном масштабировании карты точка агрегации может полностью освободить все точки:3. Резюме
здесь, чтобы использоватьleaflet.markerclusterФункция реализации агрегации точек завершена. Согласно информации на официальном сайте, эта точка агрегации также поддерживает множество функций, таких как изменение стиля границы точки агрегации, изменение стиля, ответ на событие и настройка стиля.Вы можете использовать соответствующие функции в соответствии с вашими собственными потребности в конкретных сценариях использования.
содержание
(1) Vue-CLI и Leaflet: начало работы — использование Leaflet в Vue-CLI
(3) Vue-CLI и Leaflet: добавьте маркер, полилинию, многоугольник
(4) VUE-CLI и листовка: добавьте подсказки и всплывающее окно
(5) Vue-CLI и Leaflet: точечное рисование
(6) Vue-CLI и Leaflet: рисование линий
(7) Vue-CLI и Leaflet: рисование поверхности
(8) Vue-CLI и брошюра: загрузка картографического сервиса Esri ArcGIS
(9) Vue-CLI и Leaflet: реализация основных функций управления слоями
(10) Vue-CLI AND Leaflet: запрос атрибутов AGS и запрос карты точек
(Xi) Vue-CLI и Leaflet: точечная полимеризация Leaflet.markercluster
мой GitHub, Поскольку статья написана во время кодирования, исходный код в Github может быть немного запутанным, вы можете найти соответствующий код по функции. Это будет улажено позже.