Sections

MetaMap [Parcel]

17 Aug 2023

HTML
JS
                            <!-- Обгортка для мапи -->
<div id="map"></div>
                        
                            import MetaMap from "./libs/metaMap.js";

const countryList = ["ES", "FR", "US", "GB"]; // список країн які треба підсвітити

// конфіг бібліотеки
  const config = {
    mapPath: "./js/json/map.geo.json", // Шлях до топографічних даних мапи
    width: 1484,
    height: 811,
    markers: [ // Список маркерів
      {
        long: 6.184417,
        lat: 48.692055,
      },
      {
        long: -0.460739,
        lat: 52.136436,
      },
    ],
    markerStyle: { //Стиль маркерів
      img: "images/pin.svg",
      width: 28,
      height: 32,
    },
    selectedCountries: countryList,
    zoomedCountries: countryList,
    accentFillColor: "#266DA3",
    countryFillColor: "#CBE6F1",
    countryStrokeWidth: "1.5px",
  };

  new MetaMap("#map", config);
                        

Getting Started

1. Завантажити архів з бібліотекою MetaMap.

2. Розпакувати його у ваш проєкт, наприклад в папку libs.

3. Встановити бібліотеку d3.js за допомогою npm/pnpm/yarn: npm i d3.

4. Розпаковуємо map.geo.json файл в папку json, або куди вам буде зручніше.

5. В файлі HTML створити обгортку для мапи.

<!-- Обгортка для мапи -->
<div id="map"></div>

6. Імпортувати MetaMap в js-файл.

import MetaMap from "./libs/metaMap.js";

7. Створити екземпляр мапи і передати конфіг для неї

const countryList = ["ES", "FR", "US", "GB"]; // список країн які треба підсвітити

// конфіг бібліотеки
const config = {
mapPath: "./js/json/map.geo.json", // Шлях до топографічних даних мапи
width: 1484,
height: 811,
markers: [ // Список маркерів
{
long: 6.184417,
lat: 48.692055,
},
{
long: -0.460739,
lat: 52.136436,
},
],
markerStyle: { //Стиль маркерів
img: "images/pin.svg",
width: 28,
height: 32,
},
selectedCountries: countryList,
zoomedCountries: countryList,
accentFillColor: "#266DA3",
countryFillColor: "#CBE6F1",
countryStrokeWidth: "1.5px",
};

const map = new MetaMap("#map", config);

8. Якщо ви все правильно зробили мапа має працювати

API

Parameters

selectorstring*requireСелектор елемента HTML контейнера мапи
configobject*requireОб'єкт налаштувань для мапи

Config

mapPathstring*requireШлях до топографічних даних мапи
maxZoomnumber20Максимальна кратність приближення
countryStrokeWidthstring"0.25px"Ширина кордону країни
countryFillColorstring | object"#cccccc"Колір країни
countryStrokeColorstring"#ffffff"Колір кордону країни
accentFillColorstring | object"red"Колір вибраних країн
accentStrokeColorstring"#ffffff"Колір кордону вибраних країн
groupFillColorіекштп"yellow"Колір груп країн
widthnumber | string900Ширина мапи
heightnumber | string600Висота мапи
markersarray: object[]Масив маркерів
markerStyleobject{ color: "blue", img: null, width: 20, height: 20 }Стиль маркерів
countryGroupsarray: objectnullМасив груп країн
selectedCountriesarray: string[]Масив вибраних країн
isZoomablebooleanfalsetrue - щоб дозволити зум мапи
zoomedCountriesarray: stringМасив країн до яких буде призумлена мапа після ініціалізації
onobjectОб'єкт слухачів подій

Gradient fill color:

Для того щоб передати колір як градієнт, замість звичайного значення типу string, треба передати об'єкт з такими полями:

rotate65Кут нахилу градієнту
startColor"#ffffff"Стартовий колір градієнту (можна передавати розширені налаштування){ color: "#ffffff", offset: "0%"}
endColor"#000000"Кінечний колір градієнту (можна передавати розширені налаштування){ color: "#00000", offset: "100%"}

Зсув градієнту також можна регулювати, треба передати об'єкт в поля statColor і endColor
Приклад:

// ...config
countryFillColor: { // буде звичайний градієнт без зсуву
rotate: 65,
startColor: '#061654',
endColor: '#04143A',
},
accentFillColor: { // градієнт із зсуву
rotate: 65,
startColor: {
color: "#04143A",
offset: "20%"
},
endColor: {
color: "#E4B700",
offset: "60%"
},
},

Country groups:

id"Europe"Унікальний ідентифікатор групи
countryList["UA", "GB", "PL"]Масив країн в групі

Methods

map.selectCountry(id)Виділяє країну на мапі
map.selectCountryList(idList)Виділяє масив країн на мапі
map.unselectCountry(id)Прибирає виділення країни
map.unselectAllCountries()Прибирає виділення усіх країн
map.zoomCountries(idList)Призумлює мапу до переданих країн
map.moveToCountries(idList)Переміщає карту до переданих країн
map.moveToCountry(id)Переміщає карту до переданої країни
map.selectGroup(groupId)Виділяє групу країн акцентним кольором
unselectAllGroups()Прибирає виділення всіх груп країн

Listeners

Події можна призначати в параметрі on при ініціалізації мапи.

// ... config
on: {
markerClick(path, data){
console.log("Marker was clicked!");
}
}
// ... config
countryClickpath, data, metaMap instanceСлухач який спрацьовує при кліку на країну
countryMouseEnterpath, data, metaMap instanceСлухач який спрацьовує при наведенні миші на країну
countryMouseLeavepath, data, metaMap instanceСлухач який спрацьовує коли миша покидає зону країни
markerClickСлухач який спрацьовує при кліку на маркер
markerMouseEnterpath, data, metaMap instanceСлухач який спрацьовує при наведенні миші на маркер
markerMouseLeavepath, data, metaMap instanceСлухач який спрацьовує коли миша покидає зону маркера

Countries ID

https://mapsvg.com/maps/world

Розміщаємо маркери на мапі

Для того щоб розмістити маркери на мапі треба в конфіг мапи передати масив об'єктів з широтою і довготою.

// ... config
markers: [
{
long: 6.184417,
lat: 48.692055,
},
{
long: -0.460739,
lat: 52.136436,
},
],
// ... config

Також можна передати додаткові дані в об'єкт маркеру, які будуть доступні, наприклад, при кліку на маркер.

// ... config
markers: [
{
long: 6.184417,
lat: 48.692055,
data: {text: "Some Text!"},
},
{
long: -0.460739,
lat: 52.136436,
data: {text: "Some Text 2!"},
},
],
// ... config

metaMap.zip

0