نمایک، نیاز اول کسب و کارها
پرش به محتوای اصلی

کیت توسعه جاوااسکریپت

کیت توسعه نمایک روی MapLibre GL JS: نصب با تگ اسکریپت یا ماژول، گزینه‌های نقشه، همه توابع، جعبه جست‌وجو و خطاها.

در این صفحه

نصب

کیت توسعه یک لایه نازک تایپ‌دار روی MapLibre GL JS 5 است (حدود ۸ کیلوبایت فشرده). MapLibre داخل کیت نیست: یا با تگ اسکریپت از سرور نمایک، یا با NamayekMaps.load()، یا از باندلر خودتان با use().

<link rel="stylesheet" href="https://maps.namayek.com/sdk/v1/1.2.0/maplibre-gl.css"      integrity="sha384-uTttxo/aOKbdE5RlD/SPzSDoDmNvGlUYPjONi2MN/b7c9HPSvW07OIuyP7uL6jxK" crossorigin="anonymous"><script src="https://maps.namayek.com/sdk/v1/1.2.0/maplibre-gl.js"        integrity="sha384-5+cfbwT0iiub6VsQAdn6yz16nr6sDiQoHx6tm4O8OVYXHYOxcffFmCJBL0dgdvGp" crossorigin="anonymous"></script><script src="https://maps.namayek.com/sdk/v1/1.2.0/namayek-maps.js"        integrity="sha384-iSjkl164pbPaQaOuNplJF8w4f+TQEB0H0tGBhL5vSh6veBfSsOApYH+VgJATidNT" crossorigin="anonymous"></script>
نقشه با تگ اسکریپت
<div id="map" style="height: 420px"></div><script>  const map = new NamayekMaps.Map({    container: "map",    key: "nmk_pk_YOUR_PUBLISHABLE_KEY",   // کلید عمومی، محدود به دامنه شما    style: "namayek-light",    center: [51.389, 35.6892],    // [طول، عرض]    zoom: 12,    lang: "fa",  });  map.addMarker([51.389, 35.6892], { text: "دفتر مرکزی" });</script>

گزینه‌های نقشه

گزینه‌های new NamayekMaps.Map
پارامترنوعلزومپیش‌فرضتوضیح
containerstring | HTMLElementلازم—عنصر یا شناسه عنصر نقشه؛ ارتفاع آن را خودتان تعیین کنید.
keystringلازم—کلید عمومی nmk_pk_ محدود به دامنه شما.
stylestring | StyleSpecificationاختیاریnamayek-lightسبک آماده، سبک شما (u-…)، نشانی سبک یا شیء سبک.
langfa | en | fa-enاختیاریfaزبان برچسب‌ها؛ با setLanguage بی بارگذاری دوباره عوض می‌شود.
tilesetstringاختیاریپیش‌فرض سرور (iran)مجموعه داده.
baseUrlstringاختیاریجایی که کیت بارگذاری شدهنشانی سرویس نقشه.
rtlbooleanاختیاریtrueافزونه شکل‌دهی فارسی (فقط MapLibre 5، تنبل).
attribution{ compact?: boolean }اختیاری{ compact: true }انتساب همیشه نمایش داده می‌شود؛ فقط فشرده بودنش قابل تنظیم است.
transformRequestRequestTransformFunctionاختیاری—تبدیل درخواست شما، پس از تبدیل کیت اجرا می‌شود.
center / zoom / …MapOptionsاختیاری—همه گزینه‌های دیگر MapLibre همان‌طور پذیرفته می‌شوند.

توابع

توابع NamayekMaps
نامامضاکار
new Mapnew NamayekMaps.Map(options: MapOptions)نقشه MapLibre کامل (همه API آن کار می‌کند) به‌علاوه متدهای نمایک.
SearchControlnew NamayekMaps.SearchControl(options?)جعبه جست‌وجوی فارسی برای map.addControl.
autocomplete(q, opts: ApiOptions & { near?, limit?, lang?, bbox?, countries?, types? }) => Promise<SearchResponse>پیشنهاد خودکار؛ پرسشی که پس از یکدست‌سازی خالی است بی درخواست پاسخ خالی می‌گیرد.
search(q, opts: همان autocomplete) => Promise<SearchResponse>جست‌وجوی کامل.
geocode(input: string | { street?, houseNumber?, city?, county?, state?, postcode?, country? }, opts: ApiOptions & { limit?, lang? }) => Promise<GeocodeResponse>نشانی‌یابی آزاد یا ساختاریافته.
reverse(at: LngLatLike, opts: ApiOptions & { zoom?, detail?, lang?, digits? }) => Promise<ReverseResponse>نشانی از مختصات.
route(from, to, opts: ApiOptions & { via?, profile?, alternatives?, steps?, geometry?, overview?, exclude?, lang?, digits? }) => Promise<RouteResponse>مسیریابی با دستور فارسی.
matrix(coordinates: LngLatLike[], opts: ApiOptions & { sources?, destinations?, profile?, annotations? }) => Promise<MatrixResponse>ماتریس فاصله و زمان.
staticUrl(opts: StaticOptions) => stringنشانی یکتای نقشه ایستا؛ مسیر با polyline6 و پیش‌فرض‌ها حذف.
styleUrl(style, opts: { key, lang?, tileset?, baseUrl? }) => stringنشانی سند سبک برای MapLibre خودتان.
load(opts?: { baseUrl?, css? }) => Promise<maplibregl>MapLibre همراه کیت را با SRI بارگذاری می‌کند.
use(maplibregl) => voidMapLibre باندلر خودتان را به کیت بدهید.
config(opts: { baseUrl? }) => voidنشانی سرویس نقشه را سراسری تنظیم می‌کند.
supported() => booleanآیا مرورگر WebGL دارد.
isSystemStyle(style: string) => booleanآیا شناسه یکی از چهار سبک آماده است.
version / maplibreVersionstringنسخه کیت و MapLibre همراه.
متدهای نقشه
نامامضاکار
addMarker(lngLat, { color?, text?, draggable? }) => Markerنشانگر؛ text به شکل متن (نه HTML) در پنجره کوچک می‌آید.
geolocate({ highAccuracy?, zoom?, timeoutMs? }) => Promise<{ lng, lat, accuracy }>موقعیت کاربر (فقط HTTPS و با اجازه).
autocomplete / search(q, opts?) => Promise<SearchResponse>با کلید، زبان و مرکز همین نقشه.
reverse(at?, { zoom?, detail?, digits? }) => Promise<ReverseResponse>پیش‌فرض مرکز نقشه.
route(from, to, opts?) => Promise<RouteResponse>با زبان همین نقشه.
showRoute(RouteResponse | route | LineString, { id?, color?, width?, fit? }) => stringخط مسیر زیر برچسب‌ها و قاب‌بندی خودکار.
clearRoute(id?) => voidپاک کردن خط مسیر.
setLanguage(lang) => voidتعویض زبان برچسب‌ها با diff سبک.
  • همه توابع شبکه‌ای Promise برمی‌گردانند و خطای اعتبارسنجی را هم با reject اعلام می‌کنند.
  • با signal (AbortController) درخواست را لغو کنید؛ لغو با خطای بومی AbortError رد می‌شود.
  • نوع پاسخ‌ها دقیقا همان قرارداد API است (SearchResponse، GeocodeResponse، ReverseResponse، RouteResponse، MatrixResponse) و فایل namayek-maps.d.ts کنار هر نسخه است.

جعبه جست‌وجو

جعبه جست‌وجوی فارسی با پیشنهاد خودکار، کلیدهای جهت، Enter (بی ردیف انتخابی جست‌وجوی کامل) و Escape. هر نویسه تازه درخواست قبلی را لغو می‌کند و نتیجه‌ها همیشه به شکل متن (نه HTML) نمایش داده می‌شوند.

SearchControl
map.addControl(  new NamayekMaps.SearchControl({    placeholder: "جستجوی مکان",    countries: ["ir"],    onSelect(item) {      console.log(item.title, item.lat, item.lng);    },  }),);
گزینه‌های SearchControl
پارامترنوعلزومپیش‌فرضتوضیح
placeholderstringاختیاریجستجوی مکانمتن راهنمای جعبه.
limit1..10اختیاری5تعداد پیشنهاد.
minChars1..5اختیاری2حداقل نویسه یکدست‌شده پیش از درخواست.
debounceMs100..1000اختیاری250مکث پس از تایپ؛ هر نویسه تازه درخواست قبلی را لغو می‌کند.
types / countries / bboxمثل autocompleteاختیاری—محدود کردن نتیجه‌ها.
flyTobooleanاختیاریtrueرفتن دوربین به مکان انتخاب‌شده.
markerbooleanاختیاریtrueگذاشتن نشانگر روی مکان انتخاب‌شده.
onSelect(item: SearchItem) => voidاختیاری—پس از انتخاب صدا زده می‌شود.

خطاها

خطاها NamayekMapsError با سه فیلدند: code (ثابت برای برنامه)، status (HTTP؛ صفر برای خطای سمت کیت) و message (فارسی). کدهای سرور همان‌طور عبور می‌کنند.

رسیدگی به خطا
try {  await NamayekMaps.search("تهران", { key: "nmk_pk_YOUR_PUBLISHABLE_KEY" });} catch (e) {  if (e.name === "AbortError") return;           // لغو کاربر  switch (e.code) {    case "ORIGIN_NOT_ALLOWED":                   // دامنه را به کلید اضافه کنید    case "RATE_LIMITED":                         // کمی صبر و تلاش دوباره    case "UPSTREAM_UNAVAILABLE":                 // سرویس در حال آماده‌سازی    default:      console.warn(e.code, e.status, e.message); // پیام فارسی آماده نمایش  }}
خطاهای سمت کیت توسعه
کدHTTPمعنی و اقدام
KEY_INVALIDکیتکلید API معتبر نیستکلید عمومی nmk_pk_ کامل را بدهید.
BROWSER_USE_FORBIDDENکیتکلید محرمانه در مرورگر مجاز نیستکلید عمومی بدهید؛ هر تابع کیت کلید محرمانه را رد می‌کند.
COORDINATES_INVALIDکیتمختصات معتبر نیست[lng, lat] با lng بین ‎-180‎ و ۱۸۰ و lat بین ‎-90‎ و ۹۰.
STYLE_INVALIDکیتنام سبک معتبر نیستشناسه سبک سیستمی یا u-… بدهید.
PARAM_INVALIDکیتپارامتر … معتبر نیستنام پارامتر در پیام آمده است؛ آن را با جدول پارامترها تطبیق دهید.
NETWORKکیتارتباط با سرویس نقشه برقرار نشداتصال اینترنت را بررسی کنید و دوباره تلاش کنید.
HTTP_ERRORکیتدرخواست به سرویس نقشه ناموفق بودپاسخ JSON نبود (مثلا خطای شبکه میانی)؛ status را ببینید.
MAPLIBRE_MISSINGکیتکتابخانه نقشه بارگذاری نشده استmaplibre-gl.js را پیش از کیت بگذارید یا NamayekMaps.load() را صدا بزنید.
BASE_URL_INVALIDکیتنشانی سرویس نقشه معتبر نیستbaseUrl باید نشانی http یا https باشد.
ROUTE_INVALIDکیتمسیر معتبر نیستمسیر را با geometry=geojson (پیش‌فرض) بگیرید و پاسخ NO_ROUTE را جدا رسیدگی کنید.
GEO_DENIEDکیتاجازه دسترسی به موقعیت داده نشداز کاربر بخواهید دسترسی موقعیت را در مرورگر بدهد.

نسخه و سنجاق کردن

  • نشانی نسخه‌دار https://maps.namayek.com/sdk/v1/1.2.0/namayek-maps.js هرگز تغییر نمی‌کند و یک سال کش می‌شود؛ با SRI بگذارید.
  • نشانی بی نسخه /sdk/v1/namayek-maps.js آخرین نسخه ۱٫x را می‌دهد و یک ساعت کش می‌شود؛ برای آزمایش مناسب است، نه تولید.
  • نسخه‌ها semver هستند؛ تغییر ناسازگار فقط با نسخه اصلی تازه (/sdk/v2/) می‌آید.
  • آخرین نسخه منتشرشده: 1.2.0.

آخرین به‌روزرسانی: