بدائل JavaScript متوافقة لمكتبات الخرائط والترميز الجغرافي

شيفرة الواجهة الأمامية هي أكثر ما يتضرر عند تغيير المزوّد، لأن مكتبة الخرائط وأداة الترميز الجغرافي والفوترة متشابكة معًا. تتيح لك أدوات التحميل والإعدادات هذه الاحتفاظ بشيفرة المكتبة التي لديك. وخلفها تأتي بلاطات الخرائط والترميز الجغرافي والإكمال التلقائي والارتفاع منا. تحميل الخرائط والبلاطات مجاني، ولا تُحتسب ضمن حصتك سوى استدعاءات الترميز الجغرافي.

أما لجانب REST، فمصفوفة المضيفات السبعة عشر كلها وقائمة التحقق من الانتقال موجودة في صفحة كيف تعمل البدائل المتوافقة.

في هذه الصفحة

واجهة Google Maps JavaScript API

حمّل مكتبة الخرائط من gapi.mygeocode.com بدلًا من maps.googleapis.com. تتوفر مساحة الأسماء google.maps، مع بلاطات الخرائط والعلامات وGeocoder وPlaces Autocomplete وElevationService التي نقدّمها نحن. لا يُحتسب تحميل الخرائط ضمن حصتك.

قبل
<script async defer
  src="https://maps.googleapis.com/maps/api/js?key=YOUR_GOOGLE_KEY&libraries=places&callback=initMap">
</script>
بعد
<script async defer
  src="https://gapi.mygeocode.com/maps/api/js?key=YOUR_MYGEOCODE_KEY&libraries=places&callback=initMap">
</script>
ثم استخدمها كما كنت تفعل
// Nothing below this line changes.
function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    center: { lat: 51.5074, lng: -0.1278 },
    zoom: 12
  });

  const geocoder = new google.maps.Geocoder();
  geocoder.geocode({ address: "221B Baker Street, London" }, (results, status) => {
    if (status === "OK") {
      map.setCenter(results[0].geometry.location);
      new google.maps.Marker({ map, position: results[0].geometry.location });
    }
  });

  const input = document.getElementById("search");
  const autocomplete = new google.maps.places.Autocomplete(input, { fields: ["geometry", "formatted_address"] });
  autocomplete.addListener("place_changed", () => {
    const place = autocomplete.getPlace();
    if (place.geometry) map.panTo(place.geometry.location);
  });
}

مشمول

  • google.maps.Map مع بلاطاتنا (أنواع الخرائط roadmap وsatellite وterrain)
  • الفئات Marker وInfoWindow وPolyline وPolygon وCircle وRectangle وLatLng وLatLngBounds وevent
  • Geocoder (أمامي وعكسي)
  • أداة places.Autocomplete والخدمة places.AutocompleteService
  • ElevationService
  • عناصر التحكم والإيماءات والخرائط المنسّقة بتنسيق مصفوفة الأنماط نفسه

غير مشمول

  • Street View
  • Directions وDistance Matrix وRoutes
  • Places Details وPhotos وNearby Search
  • مكتبات Drawing وVisualization وGeometry
  • طرق العرض ثلاثية الأبعاد وطبقات WebGL

ما الذي يُحتسب طلبًا. تحميل الخرائط وطلبات البلاطات مجانية. كل استدعاء للفئة Geocoder وكل جلسة Autocomplete وكل استدعاء للخدمة ElevationService يُحتسب طلبًا واحدًا.

عنصر التحكم Bing Maps V8 Web Control

يتوقف عنصر التحكم V8 مع بقية Bing Maps for Enterprise. حمّل عنصر التحكم من bing.mygeocode.com وستستمر مساحة الأسماء Microsoft.Maps في العمل، وخلفها بلاطاتنا والترميز الجغرافي والاقتراح التلقائي الخاص بنا.

قبل
<script async defer
  src="https://www.bing.com/api/maps/mapcontrol?key=YOUR_BING_KEY&callback=loadMap">
</script>
بعد
<script async defer
  src="https://bing.mygeocode.com/api/maps/mapcontrol?key=YOUR_MYGEOCODE_KEY&callback=loadMap">
</script>
ثم استخدمها كما كنت تفعل
function loadMap() {
  const map = new Microsoft.Maps.Map("#map", { center: new Microsoft.Maps.Location(47.6396, -122.13), zoom: 12 });

  Microsoft.Maps.loadModule("Microsoft.Maps.Search", () => {
    const search = new Microsoft.Maps.Search.SearchManager(map);
    search.geocode({
      where: "1 Microsoft Way, Redmond, WA",
      callback: (result) => {
        const loc = result.results[0].location;
        map.setView({ center: loc, zoom: 15 });
        map.entities.push(new Microsoft.Maps.Pushpin(loc));
      }
    });
  });
}

مشمول

  • الفئات Microsoft.Maps.Map وLocation وLocationRect وPushpin وInfobox وPolyline وPolygon وLayer
  • وحدة البحث: SearchManager.geocode وreverseGeocode
  • وحدة الاقتراح التلقائي: AutosuggestManager وربطه بحقل الإدخال
  • أنواع الخرائط للطرق والصور الجوية والتدرج الرمادي مع بلاطاتنا
  • الأحداث وشريط التنقل وخيارات الخريطة

غير مشمول

  • وحدة الاتجاهات
  • حركة المرور وSpatial Data Services والدوال المتقدمة في Spatial Math
  • صور Bird's eye وStreetside
  • وحدات Well Known Text وGeoJSON وGeoXml (استخدم وحدة GeoJSON من Leaflet أو MapLibre بدلًا منها)

ما الذي يُحتسب طلبًا. تحميل الخرائط والبلاطات مجاني. كل استدعاء للدالة geocode وreverseGeocode وكل جلسة اقتراح تلقائي يُحتسب طلبًا واحدًا.

Mapbox GL JS وmapbox-gl-geocoder

احتفظ بشيفرة الخريطة واستبدل عنواني URL: النمط، ومصدر أداة الترميز الجغرافي. MapLibre GL JS (النسخة المتفرعة مفتوحة المصدر) هي أداة العرض الموصى بها، ويعمل Mapbox GL JS v1 أيضًا. تتضمن mapbox-gl-geocoder خيار origin، لذا لا يحتاج عنصر التحكم في الترميز الجغرافي إلى أي تغيير في الشيفرة سوى ذلك.

قبل
const map = new mapboxgl.Map({
  container: "map",
  style: "mapbox://styles/mapbox/streets-v12",
  accessToken: "YOUR_MAPBOX_TOKEN"
});
map.addControl(new MapboxGeocoder({
  accessToken: "YOUR_MAPBOX_TOKEN",
  mapboxgl: mapboxgl
}));
بعد
const map = new maplibregl.Map({
  container: "map",
  style: "https://mapbox.mygeocode.com/styles/v1/mygeocode/streets?access_token=YOUR_MYGEOCODE_KEY"
});
map.addControl(new MapboxGeocoder({
  accessToken: "YOUR_MYGEOCODE_KEY",
  origin: "https://mapbox.mygeocode.com",
  mapboxgl: maplibregl
}));
ثم استخدمها كما كنت تفعل
// Direct calls keep the same shape too
const res = await fetch(
  "https://mapbox.mygeocode.com/geocoding/v5/mapbox.places/Oxford%20Street%20London.json?access_token=YOUR_MYGEOCODE_KEY",
  { headers: { "X-API-Key": "YOUR_KEY" } }
);
const { features } = await res.json();
map.flyTo({ center: features[0].center, zoom: 15 });

مشمول

  • أنماط البلاطات المتجهية: streets وlight وdark وoutdoors، وفق مواصفات أنماط Mapbox
  • mapbox-gl-geocoder مع خيار origin، بما في ذلك proximity وbbox وcountries وtypes
  • صور ثابتة على /styles/v1/mygeocode/{style}/static/{lon},{lat},{zoom}/{width}x{height}
  • بلاطات نقطية على /v4/mygeocode.streets/{z}/{x}/{y}.png لمكتبة Leaflet وOpenLayers

غير مشمول

  • Mapbox GL JS v2 والإصدارات اللاحقة (ترخيصها يشترط رموز Mapbox، استخدم MapLibre)
  • واجهات Directions وIsochrone وMatrix وOptimization
  • الأنماط المخصصة في Mapbox Studio (ارفع ملف JSON الخاص بنمطك إلى حسابك بدلًا من ذلك)

ما الذي يُحتسب طلبًا. البلاطات والصور الثابتة مجانية. كل طلب ترميز جغرافي يُحتسب طلبًا واحدًا، ويؤخّر عنصر التحكم ضغطات المفاتيح في الإكمال التلقائي كالمعتاد.

إضافات الترميز الجغرافي في Leaflet

يتواصل Leaflet مع خدمات الترميز الجغرافي عبر الإضافات، والإضافات الشائعة تقبل عنوان URL للخدمة. وجّه Leaflet Control Geocoder أو leaflet-geosearch إلى osm.mygeocode.com واستخدم بلاطاتنا للخريطة الأساسية.

قبل
L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png", {
  attribution: "&copy; OpenStreetMap contributors"
}).addTo(map);

L.Control.geocoder({
  geocoder: L.Control.Geocoder.nominatim()
}).addTo(map);
بعد
L.tileLayer("https://tiles.mygeocode.com/streets/{z}/{x}/{y}.png?key=YOUR_MYGEOCODE_KEY", {
  attribution: "&copy; My Geocode"
}).addTo(map);

L.Control.geocoder({
  geocoder: L.Control.Geocoder.nominatim({
    serviceUrl: "https://osm.mygeocode.com/",
    geocodingQueryParams: { key: "YOUR_MYGEOCODE_KEY" }
  })
}).addTo(map);
ثم استخدمها كما كنت تفعل
// leaflet-geosearch works the same way
import { OpenStreetMapProvider, GeoSearchControl } from "leaflet-geosearch";

const provider = new OpenStreetMapProvider({
  searchUrl: "https://osm.mygeocode.com/search",
  reverseUrl: "https://osm.mygeocode.com/reverse",
  params: { key: "YOUR_MYGEOCODE_KEY", addressdetails: 1 }
});
map.addControl(new GeoSearchControl({ provider, style: "bar" }));

مشمول

  • Leaflet Control Geocoder: أدوات الترميز الجغرافي nominatim وgoogle وbing وmapbox وhere وopencage وlatLng وmapquest، كل منها موجّه إلى مضيف www.mygeocode.com المقابل
  • leaflet-geosearch: المزوّدات OpenStreetMapProvider وGoogleProvider وBingProvider وHereProvider وLocationIQProvider وOpenCageProvider وGeoapifyProvider
  • بلاطات نقطية بأنماط streets وlight وdark
  • أي إضافة أخرى تتيح لك تعيين عنوان URL لخدمة Nominatim

غير مشمول

  • إضافات التوجيه (Leaflet Routing Machine وما يشبهها)
  • أنماط البلاطات غير الأنماط الثلاثة المذكورة

ما الذي يُحتسب طلبًا. البلاطات مجانية. كل ترميز جغرافي وكل ترميز جغرافي عكسي يُحتسب طلبًا واحدًا.

واجهة HERE Maps API for JavaScript

حمّل حزم mapsjs من here.mygeocode.com وأنشئ المنصة كالمعتاد. تحتفظ H.Map وH.service.Platform وخدمة البحث بتواقيعها، مع البلاطات المتجهية والترميز الجغرافي منا.

قبل
<script src="https://js.api.here.com/v3/3.1/mapsjs-core.js"></script>
<script src="https://js.api.here.com/v3/3.1/mapsjs-service.js"></script>
<script src="https://js.api.here.com/v3/3.1/mapsjs-ui.js"></script>
<script src="https://js.api.here.com/v3/3.1/mapsjs-mapevents.js"></script>
بعد
<script src="https://here.mygeocode.com/v3/3.1/mapsjs-core.js"></script>
<script src="https://here.mygeocode.com/v3/3.1/mapsjs-service.js"></script>
<script src="https://here.mygeocode.com/v3/3.1/mapsjs-ui.js"></script>
<script src="https://here.mygeocode.com/v3/3.1/mapsjs-mapevents.js"></script>
ثم استخدمها كما كنت تفعل
const platform = new H.service.Platform({ apikey: "YOUR_MYGEOCODE_KEY" });
const layers = platform.createDefaultLayers();
const map = new H.Map(document.getElementById("map"), layers.vector.normal.map, {
  center: { lat: 52.5304, lng: 13.3853 }, zoom: 13
});

platform.getSearchService().geocode(
  { q: "Invalidenstraße 116, Berlin" },
  (result) => {
    const { position } = result.items[0];
    map.setCenter(position);
    map.addObject(new H.map.Marker(position));
  },
  (err) => console.error(err)
);

مشمول

  • H.Map, H.map.Marker, H.map.Polyline, H.map.Polygon, H.map.Group
  • H.service.Platform مع createDefaultLayers (vector normal وsatellite وterrain)
  • SearchService: الدوال geocode وreverseGeocode وautosuggest
  • عناصر التحكم الافتراضية في H.ui.UI وH.mapevents.Behavior
  • H.geo.Point وH.geo.Rect والدوال المساعدة

غير مشمول

  • خدمات Routing وIsoline وPublic Transit
  • طبقات حركة المرور والحوادث
  • Places Discover وBrowse
  • أنماط الخرائط المخصصة من HERE Style Editor (استخدم تنسيق JSON للأنماط الخاص بنا)

ما الذي يُحتسب طلبًا. تحميل الخرائط والبلاطات مجاني. كل استدعاء للدالة geocode وreverseGeocode وautosuggest يُحتسب طلبًا واحدًا.

MapQuest.js

تغلّف MapQuest.js مكتبة Leaflet وتضيف L.mapquest.geocoding(). حمّل الحزمة من mapquest.mygeocode.com وعيّن مفتاحك كما كنت تفعل.

قبل
<script src="https://api.mqcdn.com/sdk/mapquest-js/v1.3.2/mapquest.js"></script>
<link type="text/css" rel="stylesheet" href="https://api.mqcdn.com/sdk/mapquest-js/v1.3.2/mapquest.css"/>
بعد
<script src="https://mapquest.mygeocode.com/sdk/mapquest-js/v1.3.2/mapquest.js"></script>
<link type="text/css" rel="stylesheet" href="https://mapquest.mygeocode.com/sdk/mapquest-js/v1.3.2/mapquest.css"/>
ثم استخدمها كما كنت تفعل
L.mapquest.key = "YOUR_MYGEOCODE_KEY";

const map = L.mapquest.map("map", {
  center: [41.8789, -87.6359],
  layers: L.mapquest.tileLayer("map"),
  zoom: 12
});

L.mapquest.geocoding().geocode("233 S Wacker Dr, Chicago, IL", (err, response) => {
  const loc = response.results[0].locations[0].latLng;
  map.setView(loc, 15);
  L.marker(loc, { icon: L.mapquest.icons.marker() }).addTo(map);
});

مشمول

  • L.mapquest.map وtileLayer (map وhybrid وsatellite وlight وdark)
  • L.mapquest.geocoding مع geocode وreverse
  • عنصر التحكم L.mapquest.searchAhead (الإكمال التلقائي)
  • الأيقونات ومواضع عناصر التحكم وواجهة Leaflet API القياسية

غير مشمول

  • الاتجاهات وطبقات المسارات
  • طبقة حركة المرور
  • واجهة Static Map API

ما الذي يُحتسب طلبًا. البلاطات مجانية. كل طلب geocode وreverse وsearch-ahead يُحتسب طلبًا واحدًا.

بلاطات الخرائط وأنماطها

تستخدم كل أدوات التحميل أعلاه خدمة البلاطات نفسها، ويمكنك أيضًا استخدامها مباشرة من أي مكتبة.

التنسيقURL
نقطية، 256pxhttps://tiles.mygeocode.com/{style}/{z}/{x}/{y}.png
نقطية، 512px للشاشات عالية الكثافةhttps://tiles.mygeocode.com/{style}/{z}/{x}/{y}@2x.png
بلاطات متجهية (MVT)https://tiles.mygeocode.com/v/{z}/{x}/{y}.pbf
ملف JSON للأنماط لمكتبة MapLibre وMapbox GLhttps://tiles.mygeocode.com/styles/{style}.json

الأنماط هي streets وlight وdark وoutdoors وsatellite. حركة البلاطات لا تُحتسب في الفوترة ولا تحتاج إلى مفتاح. تُرسم بلاطاتنا من بيانات OpenStreetMap وبياناتنا الخاصة، ويجب أن يعرض عنصر الإسناد © OpenStreetMap contributors وMy Geocode، وهو ما تضيفه أدوات التحميل أعلاه نيابة عنك.

المفاتيح في المتصفح

لا تضع مفتاح API في شيفرة جهة العميل. المفتاح الموجود في مصدر الصفحة مفتاح يستطيع أي شخص قراءته، وبما أن المفتاح يعمل من عنواني IP أو ثلاثة في الوقت نفسه، فإنه يتوقف عن العمل بعد الزائر الثاني أو الثالث على أي حال.

لا تحتاج بلاطات الخرائط وأنماطها وأدوات تحميل المكتبات أعلاه إلى أي مفتاح، لذا تعمل الخريطة نفسها دائمًا. أما استدعاءات الترميز الجغرافي والإكمال التلقائي والارتفاع التي تجريها المكتبات، فمرّرها عبر خادمك: تقبل أدوات التحميل المعامل proxy (gapi.mygeocode.com/maps/api/js?proxy=https://yoursite.com/geo) وترسل تلك الاستدعاءات إليه، فيضيف خادمك المفتاح ويمرّر الطلب إلينا. وعندها تُترك العناصر النائبة YOUR_MYGEOCODE_KEY أعلاه فارغة.

  • يمكن للوكيل الخاص بك إضافة التخزين المؤقت وحدوده الخاصة، وهو ما لا تستطيعه المتصفحات.
  • تصل الطلبات حينها من عنوان خادمك، لذا يغطي مفتاح واحد أي عدد من الزوار.