آموزش استفاده از نقشه سفارشی در MapLibre، Leaflet و OpenLayers

در این آموزش یک نقشه پایه اختصاصی میسازیم و آن را به یک صفحه وب اضافه میکنیم. اگر هنوز با ابزار سفارشیسازی آشنا نیستید، ابتدا مطلب معرفی سفارشیسازی نقشه را ببینید.
گام ۱: ورود به ابزار
وارد داشبورد شوید و از منوی کناری «سفارشیسازی نقشه» را باز کنید. صفحه دو بخش دارد: پنل تنظیمات و نقشه پیشنمایش زنده.
گام ۲: انتخاب سبک پایه
در زبانه «رنگها»، بخش استایل پایه:
- یکی از خانوادههای Nesscaffe، Gruvcaffe یا Orosi را انتخاب کنید.
- حالت تیره یا روشن را مشخص کنید.
با تغییر سبک پایه، رنگهای سفارشی قبلی پاک میشوند؛ پس اول سبک پایه را انتخاب کنید و بعد رنگها را تغییر دهید.
گام ۳: تنظیم رنگها
روی هر رنگ کلیک کنید و رنگ جدید را انتخاب کنید:
- پسزمینه و محیط: پسزمینه، آب، پوشش گیاهی، ساختمانها، مرزها
- جادهها: آزادراه، بزرگراه/اصلی، فرعی، کوچه/خدماتی
تغییرات بلافاصله روی نقشه دیده میشوند.
گام ۴: متن و نمای اولیه
در زبانه «متن»:
- فونت برچسبها را انتخاب کنید (یا «فونت پیشفرض استایل» را نگه دارید)
- رنگ نام شهرها، کشورها، محلهها و هاله متن را تنظیم کنید؛ هاله باید با پسزمینه کنتراست داشته باشد تا نامها خوانا بمانند
- مرکز و زوم اولیه نقشه را وارد کنید (مثلا تهران: طول
51.42و عرض35.69)
گام ۵: دریافت خروجی
در زبانه «خروجی»:
- دانلود: فایل
style.jsonرا ذخیره کنید - کپی JSON: محتوای استایل را در کلیپبورد کپی کنید
- دانلود mapbox-gl-rtl-text.min.js: افزونه نمایش صحیح متن فارسی؛ آن را کنار فایلهای سایت خود (مثلا در پوشه
public/) قرار دهید
دکمه «ریست» همه تغییرات را به حالت سبک پایه برمیگرداند.
اگر هیچ تغییری در رنگ یا فونت ندهید، به فایل جداگانه نیازی ندارید و میتوانید مستقیم از آدرس سبک پایه استفاده کنید، مثلا
https://tile.geotajak.ir/tile/141/orosi-light.json.
گام ۶: افزودن نقشه به سایت
فایل style.json دانلودشده را کنار صفحه خود قرار دهید (مثلا /my-style.json) و یکی از روشهای زیر را انتخاب کنید.
MapLibre GL JS (پیشنهادی)
npm install maplibre-gl
import maplibregl from "maplibre-gl";
import "maplibre-gl/dist/maplibre-gl.css";
// نمایش درست متن فارسی و عربی
maplibregl.setRTLTextPlugin("/mapbox-gl-rtl-text.min.js", true);
const map = new maplibregl.Map({
container: "map",
style: "/my-style.json", // یا آدرس سبک پایه
center: [51.42, 35.69],
zoom: 12,
});
map.addControl(new maplibregl.NavigationControl());
<div id="map" style="width: 100%; height: 500px"></div>
Leaflet
Leaflet بهتنهایی نقشه برداری را نمایش نمیدهد؛ با افزونه maplibre-gl-leaflet از همان استایل استفاده کنید:
npm install leaflet maplibre-gl @maplibre/maplibre-gl-leaflet
import L from "leaflet";
import "leaflet/dist/leaflet.css";
import maplibregl from "maplibre-gl";
import "@maplibre/maplibre-gl-leaflet";
maplibregl.setRTLTextPlugin("/mapbox-gl-rtl-text.min.js", true);
const map = L.map("map").setView([35.69, 51.42], 12);
L.maplibreGL({ style: "/my-style.json" }).addTo(map);
OpenLayers
npm install ol ol-mapbox-style
import Map from "ol/Map";
import View from "ol/View";
import { fromLonLat } from "ol/proj";
import { apply } from "ol-mapbox-style";
const map = new Map({
target: "map",
view: new View({ center: fromLonLat([51.42, 35.69]), zoom: 12 }),
});
apply(map, "/my-style.json");
تغییر استایل در زمان اجرا
برای مثال تعویض بین حالت روز و شب:
const styles = {
day: "https://tile.geotajak.ir/tile/141/orosi-light.json",
night: "/my-style.json",
};
function setTheme(name) {
map.setStyle(styles[name]);
}
نکتهها و رفع اشکال
- حروف فارسی جدا از هم یا برعکس نمایش داده میشوند: افزونه RTL بارگذاری نشده است. آدرس
setRTLTextPluginرا بررسی کنید و مطمئن شوید قبل از ساخت نقشه فراخوانی میشود. - نقشه خالی است: ارتفاع المان نقشه (
#map) را مشخص کنید؛ المان بدون ارتفاع نمایش داده نمیشود. - خطای CORS هنگام بارگذاری style.json: فایل را از همان دامنه سایت خود سرو کنید یا مستقیم از آدرس سبک پایه استفاده کنید.
- نقشه در مرورگر نمایش داده نمیشود: نقشههای برداری به WebGL نیاز دارند؛ در مرورگرهای قدیمی یا با شتابدهنده گرافیکی غیرفعال کار نمیکنند.
- میتوانید روی همین نقشه، لایههای خودتان (GeoJSON، نقاط، مسیرها) را با
map.addSourceوmap.addLayerاضافه کنید. برای جستجوی آدرس و مسیریابی روی نقشه، سرویسهای مکانی را ببینید.
سوالی دارید؟ از بخش تیکتها در داشبورد با ما در ارتباط باشید.
