טיפול בתגובה של Isochrones API והצגה שלה

‫Isochrones API מחזיר גיאומטריה בפורמט GeoJSON סטנדרטי שתואם ל-RFC 7946. התגובה תמיד מכילה אובייקט גיאומטרי מסוג MultiPolygon בשדה isochrone.geoJson (isochrone.geo_json ב-gRPC):

  • סדר הקואורדינטות: כל מיקום הוא זוג [longitude, latitude] במעלות עשרוניות של WGS 84.
  • כמה פוליגונים (coordinates[i]): אזורי איזוכרון נגישים יכולים להיות מורכבים מכמה פוליגונים נפרדים (לדוגמה, כשגשר או מנהרה במהירות גבוהה מתחברים לאזור נגיש נפרד, או כשפוליגון שחוצה את קו האורך ±180° מפוצל לאורך קו האורך בהתאם ל-RFC 7946 §3.1.9).
  • מעטפות חיצוניות וחורים פנימיים (coordinates[i][j]): בכל פוליגון coordinates[i], הטבעת הלינארית הראשונה (coordinates[i][0]) היא המעטפת החיצונית שמסתובבת נגד כיוון השעון, וכל הטבעות הלינאריות הבאות (coordinates[i][1..k]) מייצגות חורים פנימיים (כמו אגמים, פארקים או אזורים לא ממופים) שמסתובבים עם כיוון השעון בהתאם לכלל היד הימנית של RFC 7946 §3.1.6. כל טבעת ליניארית סגורה (המיקומים הראשונים והאחרונים שלה ב-[longitude, latitude] זהים).

בדוגמה הבאה מוצגת תשובה של MultiPolygon שמכילה פוליגון ראשי עם חור פנימי ופוליגון שני לא חופף:

{
  "isochrone": {
    "geoJson": {
      "type": "MultiPolygon",
      "coordinates": [
        [
          [
            [-122.340000, 47.600000],
            [-122.320000, 47.600000],
            [-122.320000, 47.615000],
            [-122.340000, 47.615000],
            [-122.340000, 47.600000]
          ],
          [
            [-122.334000, 47.604000],
            [-122.334000, 47.609000],
            [-122.328000, 47.609000],
            [-122.328000, 47.604000],
            [-122.334000, 47.604000]
          ]
        ],
        [
          [
            [-122.355000, 47.602000],
            [-122.348000, 47.602000],
            [-122.348000, 47.608000],
            [-122.355000, 47.608000],
            [-122.355000, 47.602000]
          ]
        ]
      ]
    }
  }
}

הצגת האיזוכרון במפה

מכיוון שה-API מחזיר GeoJSON סטנדרטי, אפשר להציג את התשובה באמצעות Maps JavaScript API. הכיתה google.maps.Data תומכת ב-GeoJSON באופן מקורי, כך שלא צריך להפוך באופן ידני את סדר הקואורדינטות של [longitude, latitude].

קטע הקוד הבא ב-JavaScript מדגים איך להוסיף את התגובה מה-API ישירות למפה:

// Assume 'map' is an initialized google.maps.Map object
// and 'responseData' is the parsed JSON payload returned by the Isochrones API.

const isochroneGeoJson = responseData.isochrone.geoJson;

// Wrap the geometry in a standard GeoJSON Feature
const geoJsonFeature = {
    type: "Feature",
    geometry: isochroneGeoJson,
    properties: {}
};

// Add the GeoJSON Feature to the map's data layer
map.data.addGeoJson(geoJsonFeature);

// Optional: Apply custom styling to the isochrone polygon
map.data.setStyle({
    fillColor: '#4285F4',
    fillOpacity: 0.3,
    strokeColor: '#4285F4',
    strokeWeight: 2
});