استيراد بيانات GeoJSON إلى "خرائط Google"

نظرة عامة

تعرَّف على كيفية استيراد بيانات GeoJSON من مصدر محلي أو عن بُعد، وعرضها على خريطتك. يستخدِم هذا الدليل التعليمي الخريطة أدناه لشرح الأساليب المختلفة لاستيراد البيانات إلى الخرائط.

يعرض القسم أدناه الرمز البرمجي الكامل الذي تحتاجه لإنشاء الخريطة في هذا الدليل التعليمي.

TypeScript

let map: google.maps.Map;

function initMap(): void {
  map = new google.maps.Map(document.getElementById("map") as HTMLElement, {
    zoom: 2,
    center: new google.maps.LatLng(2.8, -187.3),
    mapTypeId: "terrain",
  });

  // Create a <script> tag and set the USGS URL as the source.
  const script = document.createElement("script");

  // This example uses a local copy of the GeoJSON stored at
  // http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_week.geojsonp
  script.src =
    "https://developers.google.com/maps/documentation/javascript/examples/json/earthquake_GeoJSONP.js";
  document.getElementsByTagName("head")[0].appendChild(script);
}

// Loop through the results array and place a marker for each
// set of coordinates.
const eqfeed_callback = function (results: any) {
  for (let i = 0; i < results.features.length; i++) {
    const coords = results.features[i].geometry.coordinates;
    const latLng = new google.maps.LatLng(coords[1], coords[0]);

    new google.maps.Marker({
      position: latLng,
      map: map,
    });
  }
};

declare global {
  interface Window {
    initMap: () => void;
    eqfeed_callback: (results: any) => void;
  }
}
window.initMap = initMap;
window.eqfeed_callback = eqfeed_callback;

JavaScript

let map;

function initMap() {
  map = new google.maps.Map(document.getElementById("map"), {
    zoom: 2,
    center: new google.maps.LatLng(2.8, -187.3),
    mapTypeId: "terrain",
  });

  // Create a <script> tag and set the USGS URL as the source.
  const script = document.createElement("script");

  // This example uses a local copy of the GeoJSON stored at
  // http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_week.geojsonp
  script.src =
    "https://developers.google.com/maps/documentation/javascript/examples/json/earthquake_GeoJSONP.js";
  document.getElementsByTagName("head")[0].appendChild(script);
}

// Loop through the results array and place a marker for each
// set of coordinates.
const eqfeed_callback = function (results) {
  for (let i = 0; i < results.features.length; i++) {
    const coords = results.features[i].geometry.coordinates;
    const latLng = new google.maps.LatLng(coords[1], coords[0]);

    new google.maps.Marker({
      position: latLng,
      map: map,
    });
  }
};

window.initMap = initMap;
window.eqfeed_callback = eqfeed_callback;

CSS

/* 
 * Always set the map height explicitly to define the size of the div element
 * that contains the map. 
 */
#map {
  height: 100%;
}

/* 
 * Optional: Makes the sample page fill the window. 
 */
html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}

HTML

<html>
  <head>
    <title>Earthquake Markers</title>

    <link rel="stylesheet" type="text/css" href="./style.css" />
    <script type="module" src="./index.js"></script>
  </head>
  <body>
    <div id="map"></div>

    <!-- 
      The `defer` attribute causes the script to execute after the full HTML
      document has been parsed. For non-blocking uses, avoiding race conditions,
      and consistent behavior across browsers, consider loading using Promises. See
      https://developers.google.com/maps/documentation/javascript/load-maps-js-api
      for more information.
      -->
    <script
      src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg&callback=initMap&v=weekly"
      defer
    ></script>
  </body>
</html>

تجربة عيّنة

جارٍ تحميل البيانات

يوضّح لك هذا القسم كيفية تحميل البيانات من النطاق نفسه الذي يتضمّن تطبيق Maps JavaScript API أو من نطاق مختلف.

تحميل البيانات من النطاق نفسه

توفّر طبقة بيانات "خرائط Google" حاوية للبيانات الجيوفضائية العشوائية (بما في ذلك GeoJSON). إذا كانت بياناتك في ملف مستضاف على النطاق نفسه الذي يستضيف تطبيقك المتوافق مع Maps JavaScript API، يمكنك تحميله باستخدام الطريقة map.data.loadGeoJson(). يجب أن يكون الملف على النطاق نفسه، ولكن يمكنك استضافته في نطاق فرعي مختلف. على سبيل المثال، يمكنك إرسال طلب إلى files.example.com من www.example.com.

map.data.loadGeoJson('data.json');

تحميل البيانات على جميع النطاقات

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

Access-Control-Allow-Origin: *

استخدِم أدوات مطوّري برامج Chrome (DevTools) لمعرفة ما إذا كان النطاق قد فعّل سياسة مشاركة الموارد المتعددة المصادر (CORS).

إنّ تحميل البيانات من نطاق كهذا هو نفسه loading JSON من النطاق نفسه:

map.data.loadGeoJson('http://www.CORS-ENABLED-SITE.com/data.json');

طلب JSONP

يجب أن يتيح النطاق المستهدَف طلبات JSONP لاستخدام هذه التقنية.

لطلب JSONP، استخدِم createElement() لإضافة علامة script إلى رأس المستند.

var script = document.createElement('script');
script.src = 'http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_week.geojsonp';
document.getElementsByTagName('head')[0].appendChild(script);

عند تشغيل النص البرمجي، يُرسِل النطاق المستهدَف البيانات كوسيطة إلى نص برمجي آخر، يُسمّى عادةً callback(). يحدِّد النطاق المستهدَف اسم ملف برمجي للاستدعاء، وهو الاسم الأول على الصفحة عند تحميل عنوان URL المستهدف في متصفّح.

على سبيل المثال، حمِّل http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_week.geojsonp في نافذة المتصفّح للكشف عن اسم طلب إعادة الاتصال على أنّه eqfeed_callback.

يجب تحديد نص الإجراء المُعاد الاتصال به في الرمز البرمجي:

function eqfeed_callback(response) {
  map.data.addGeoJson(response);
}

استخدِم الطريقة addGeoJson() لوضع بيانات GeoJSON المفسَّرة على الخريطة.

تصميم البيانات

يمكنك تغيير مظهر بياناتك عن طريق إضافة بيانات GeoJSON إلى ملف شخصي على "خرائط Google". اطّلِع على دليل المطوّر للحصول على مزيد من المعلومات عن تنسيق بياناتك.

مزيد من المعلومات

  • ‫GeoJSON هو تنسيق مفتوح يُستخدَم على نطاق واسع لترميز البيانات الجغرافية، استنادًا إلى JSON (JavaScript Object Notation). تعمل أدوات JavaScript وطُرقها المصمّمة لبيانات JSON أيضًا مع GeoJSON. اطّلِع على دليل المطوّر لمزيد من المعلومات.
  • اختصار JSONP يعني ملفات JSON التي تمّت تعبئتها. وهي طريقة تواصل تُستخدَم في برامج JavaScript التي تعمل في متصفّحات الويب لطلب البيانات من خادم في نطاق مختلف.