Как обрабатывать и визуализировать ответы 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
});