diff --git a/infra/deploy-runner/build-map-gateway-artifact.mjs b/infra/deploy-runner/build-map-gateway-artifact.mjs index cbd31e2..f2067a7 100644 --- a/infra/deploy-runner/build-map-gateway-artifact.mjs +++ b/infra/deploy-runner/build-map-gateway-artifact.mjs @@ -8,7 +8,7 @@ import { fileURLToPath } from "node:url"; const scriptDir = dirname(fileURLToPath(import.meta.url)); const platformRoot = resolve(scriptDir, "../.."); -const artifactDir = resolve(scriptDir, "../deploy-artifacts"); +const artifactDir = resolve(process.env.NODEDC_DEPLOY_ARTIFACT_DIR || resolve(scriptDir, "../deploy-artifacts")); const [patchId = "platform-map-gateway-20260714-001", ...extra] = process.argv.slice(2); if (extra.length || !/^[A-Za-z0-9._-]{1,96}$/.test(patchId)) throw new Error("usage: build-map-gateway-artifact.mjs [patch-id]"); @@ -27,13 +27,32 @@ try { await writeFile(join(stage, "manifest.env"), `id=${patchId}\ncomponent=platform\ntype=app-overlay\n`, "utf8"); await writeFile(join(stage, "files.txt"), `${files.map(([, destination]) => destination).join("\n")}\n`, "utf8"); await mkdir(artifactDir, { recursive: true }); - const tar = spawnSync("python3", ["-c", "import sys,tarfile\nwith tarfile.open(sys.argv[1],'w:gz',format=tarfile.PAX_FORMAT) as a:\n [a.add(n,arcname=n,recursive=True) for n in ('manifest.env','files.txt','payload')]", target], { cwd: stage, encoding: "utf8" }); + const tar = spawnSync("python3", ["-c", canonicalTarScript(), target, stage], { + encoding: "utf8", + maxBuffer: 128 * 1024 * 1024, + }); if (tar.status !== 0) throw new Error(`tar_failed:${tar.stderr || tar.stdout}`); console.log(JSON.stringify({ ok: true, patchId, artifact: target, sha256: createHash("sha256").update(await readFile(target)).digest("hex") }, null, 2)); } finally { await rm(stage, { recursive: true, force: true }); } +function canonicalTarScript() { + return [ + "import gzip,io,pathlib,sys,tarfile", + "root=pathlib.Path(sys.argv[2])", + "with open(sys.argv[1],'wb') as out:", + " with gzip.GzipFile(filename='',mode='wb',fileobj=out,compresslevel=9,mtime=0) as gz:", + " with tarfile.open(fileobj=gz,mode='w',format=tarfile.PAX_FORMAT) as tar:", + " for top in ('manifest.env','files.txt','payload'):", + " p=root/top; paths=[p]+(sorted(p.rglob('*')) if p.is_dir() else [])", + " for x in paths:", + " info=tar.gettarinfo(str(x),arcname=x.relative_to(root).as_posix())", + " info.uid=info.gid=0; info.uname=info.gname='root'; info.mtime=0; info.mode=0o755 if info.isdir() else 0o644", + " with (open(x,'rb') if info.isfile() else io.BytesIO()) as src: tar.addfile(info,src if info.isfile() else None)", + ].join("\n"); +} + async function copySafe(source, destination) { const info = await lstat(source); if (info.isSymbolicLink()) throw new Error(`source_symlink_rejected:${source}`); diff --git a/infra/synology/docker-compose.platform-http.yml b/infra/synology/docker-compose.platform-http.yml index 46be4e3..1d26c0c 100644 --- a/infra/synology/docker-compose.platform-http.yml +++ b/infra/synology/docker-compose.platform-http.yml @@ -279,6 +279,9 @@ services: MAP_GATEWAY_UPSTREAM_ALLOWLIST: ${MAP_GATEWAY_UPSTREAM_ALLOWLIST:-api.cesium.com,assets.ion.cesium.com,tile.openstreetmap.org,dev.virtualearth.net,ecn.t0.tiles.virtualearth.net,ecn.t1.tiles.virtualearth.net,ecn.t2.tiles.virtualearth.net,ecn.t3.tiles.virtualearth.net} MAP_GATEWAY_LEGACY_CACHE_HOSTS: ${MAP_GATEWAY_LEGACY_CACHE_HOSTS:-} MAP_GATEWAY_OFFLINE_PROVIDER_ALLOWLIST: ${MAP_GATEWAY_OFFLINE_PROVIDER_ALLOWLIST:-} + MAP_REFERENCE_STATION_FETCH_ENABLED: ${MAP_REFERENCE_STATION_FETCH_ENABLED:-true} + MAP_REFERENCE_STATION_CELL_DEGREES: ${MAP_REFERENCE_STATION_CELL_DEGREES:-0.5} + MAP_REFERENCE_STATION_OVERPASS_URL: ${MAP_REFERENCE_STATION_OVERPASS_URL:-https://overpass-api.de/api/interpreter} volumes: - type: bind source: ${MAP_LIVE_CACHE_HOST_DIR:-/volume1/docker/nodedc-platform/map-gateway/live-tile-cache} diff --git a/services/map-gateway/Dockerfile b/services/map-gateway/Dockerfile index e1017a2..8869788 100644 --- a/services/map-gateway/Dockerfile +++ b/services/map-gateway/Dockerfile @@ -11,6 +11,7 @@ RUN apk add --no-cache su-exec COPY package.json ./ COPY src ./src COPY zone-sources ./zone-sources +COPY reference-sources ./reference-sources COPY runtime-entrypoint.mjs /app/runtime-entrypoint.mjs EXPOSE 18103 diff --git a/services/map-gateway/README.md b/services/map-gateway/README.md index 3f74466..9788bd0 100644 --- a/services/map-gateway/README.md +++ b/services/map-gateway/README.md @@ -13,6 +13,10 @@ - защищает proxy allowlist-ом upstream hosts, HTTPS-only правилом, лимитами размера и token-free cache key; - ведёт лёгкий persistent cache index и health/stats без автоматического удаления уже записанных tiles. - отдаёт Engine отдельный provider-neutral generation геозон из проверенного профиля: текущий backend — версионированный snapshot Дептранса, будущий API-адаптер обязан материализовать тот же envelope и не меняет L2-потребителя. +- отдаёт Foundry provider-neutral справочный snapshot транспортных станций: + seed Москвы из проверенного legacy MMAP donor плюс bounded spatial + cache OSM для новых viewport. L1/L2 и пользовательские Data Product в этом + контуре не участвуют. ## API @@ -20,8 +24,44 @@ GET /healthz GET /api/map/ion/assets/:assetId/endpoint GET|HEAD /api/map/cache?url= +GET /api/map/reference-sources/v1/profiles/transport-stations.v1/current +GET /api/map/reference-sources/v1/profiles/transport-stations.v1/current?bbox=west,south,east,north +GET /api/map/reference-sources/v1/profiles/transport-stations.v1/search?q=&limit=12 ``` +Reference-station route возвращает `nodedc.map-reference.snapshot/v1` и только +два онтологических типа: `map.station` и `map.terminal`. Категории v1 — +`metro`, `railway_station`, `railway_terminal`. Проекция allowlist-ит имена, +operator/network, `uic_ref`, wheelchair и геометрию; raw OSM tags, upstream +endpoint и provider credentials в snapshot отсутствуют. + +Seed проверяется на старте и покрывает Москву без сетевого запроса. Для bbox за +пределами покрытия Gateway делит область на фиксированные spatial cells, +выполняет не более двух OSM-запросов одновременно, разносит старты запросов +минимум на 750 мс, дедуплицирует одинаковые +inflight cells и атомарно пишет нормализованный cell snapshot в +`${MAP_CACHE_DIR}/reference-features`. Warm viewport читается из этого +persistent cache. `name:ru` имеет приоритет перед общим `name`. Неудачный +upstream не повреждает уже сохранённые cells; `complete=false` сообщает +вызывающей стороне о частичном результате. `/healthz` возвращает только +безопасный код последней ошибки, её время, counters и глубину очереди — без +upstream endpoint или payload. + +Поиск вне уже загруженного viewport вызывается только явным Enter пользователя. +Gateway сначала ищет в seed и persistent search index, затем при miss выполняет +точный OSM name lookup. Upstream selector использует глобально индексированные +`name`/`name:ru`, а найденные элементы повторно проходят fail-closed проверку +`railway=station|halt`. Это не autocomplete и не глобальный regex scan. +Нормализованный результат атомарно пополняет persistent search index; после +перелёта обычный bbox-контур загружает полную spatial cell. Одинаковые запросы +дедуплицируются и кэшируются, а `/healthz` отдельно показывает безопасные +search counters. + +Граница seed округляется наружу до границ этих spatial cells. Поэтому viewport +внутри московского покрытия всегда отвечает синхронно из packaged snapshot и +не ожидает OSM только из-за того, что содержащая его ячейка выходит за крайнюю +координату одной из seed-точек. + Внутренний route `GET|HEAD /internal/zone-sources/v1/profiles/moscow-pmd-slow-zones/current` доступен сервисам в private `engine` network и намеренно не публикуется через Caddy. На старте Gateway проверяет manifest, SHA-256 обоих исходных JSON, геометрию, замкнутость колец, уникальность identity, расписание и его связи с зонами; повреждённый или неполный generation останавливает запуск. Сейчас profile упакован в image как immutable MMap snapshot. Для будущего Дептранс API меняется producer профиля (`depttrans-api-snapshot-v1`), но endpoint, stable source IDs и `nodedc.zone-source-generation/v2` остаются прежними. Внутренний admin route `GET|PUT /api/map/admin/cesium-ion` не является Browser API: он доступен только из Foundry по HMAC. Ключ подписи создаётся и хранится root-owned deploy runner в `/volume1/docker/nodedc-platform/secrets/map-gateway-admin-secret`, а оба сервиса получают только read-only file mount. Он не является `.env`-значением, настройкой Foundry или Cesium credential. Перед записью `PUT` проверяет candidate token через Cesium asset endpoints `1` (terrain), `2` (imagery) и `96188` (3D Buildings). Не прошедшее проверку значение не заменяет рабочее. Успешный token записывается атомарно в `${MAP_CACHE_DIR}/secrets/cesium-ion-token` с mode `0600`; ответ содержит только факт конфигурации, safe verification state и audit metadata — никогда само значение. @@ -90,6 +130,8 @@ MAP_GATEWAY_LEGACY_CACHE_HOSTS=ecn.t0.tiles.virtualearth.net,ecn.t1.tiles.virtua MAP_GATEWAY_OFFLINE_PROVIDER_ALLOWLIST= MAP_CACHE_DIR=/var/lib/nodedc-map-cache MAP_CACHE_MODE=readwrite +MAP_REFERENCE_STATION_FETCH_ENABLED=true +MAP_REFERENCE_STATION_CELL_DEGREES=0.5 ``` # Cache topology diff --git a/services/map-gateway/package.json b/services/map-gateway/package.json index 7566473..a1ab7c0 100644 --- a/services/map-gateway/package.json +++ b/services/map-gateway/package.json @@ -12,6 +12,7 @@ "test:streaming-cache-fill": "node scripts/smoke-streaming-cache-fill.mjs", "test:zone-source": "node --test test/zone-source-snapshot.test.mjs", "test:zone-source-route": "node scripts/smoke-zone-source.mjs", + "test:reference-stations": "node --test test/reference-station-source.test.mjs", "audit:engine-cache": "node scripts/audit-engine-cache.mjs", "import:engine-cache": "node scripts/import-engine-cache.mjs" }, diff --git a/services/map-gateway/reference-sources/transport-stations/moscow-v1.json b/services/map-gateway/reference-sources/transport-stations/moscow-v1.json new file mode 100644 index 0000000..dd52078 --- /dev/null +++ b/services/map-gateway/reference-sources/transport-stations/moscow-v1.json @@ -0,0 +1 @@ +{"schemaVersion":"nodedc.map-reference-seed/v1","profileId":"transport-stations.v1","sourceRevision":"seed-6deeeeb867ea6c5a","generatedAt":"2025-11-23T19:43:15.000Z","contentDigest":"6deeeeb867ea6c5a78c3fae99b1dff209332bc538d41c572134b825d4f74ad74","complete":true,"facts":[{"sourceId":"osm.node.1062135937","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Лефортово","category":"railway_station","operator":"ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.7460652,55.7627946]},"presentationStatus":"active"},{"sourceId":"osm.node.1062474614","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Владыкино-Московское","category":"railway_station","operator":"ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.5962705,55.847279]},"presentationStatus":"active"},{"sourceId":"osm.node.1062480585","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Новопролетарская","category":"railway_station","operator":"ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.730944,55.7242373]},"presentationStatus":"active"},{"sourceId":"osm.node.1062487275","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Серебряный Бор","category":"railway_station","operator":"ОАО «РЖД»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.4954545,55.8031708]},"presentationStatus":"active"},{"sourceId":"osm.node.10702113003","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Варшавская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6195024,55.6533344]},"presentationStatus":"active"},{"sourceId":"osm.node.10702213023","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Кленовый бульвар","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.6807341,55.6744865]},"presentationStatus":"active"},{"sourceId":"osm.node.10702213026","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Нагатинский Затон","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.7043027,55.6843314]},"presentationStatus":"active"},{"sourceId":"osm.node.10702442752","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Печатники","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.727363,55.6946059]},"presentationStatus":"active"},{"sourceId":"osm.node.10702471714","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Текстильщики","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.7284789,55.706995]},"presentationStatus":"active"},{"sourceId":"osm.node.10702624107","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Марьина Роща","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6164167,55.7965331]},"presentationStatus":"active"},{"sourceId":"osm.node.10702624108","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Рижская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6343276,55.7938842]},"presentationStatus":"active"},{"sourceId":"osm.node.10703951288","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Сокольники","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.6792574,55.7901778]},"presentationStatus":"active"},{"sourceId":"osm.node.10706343979","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Марьина Роща","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001196"},"geometry":{"type":"Point","coordinates":[37.6193029,55.8009917]},"presentationStatus":"active"},{"sourceId":"osm.node.10712227612","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Горенки","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001059"},"geometry":{"type":"Point","coordinates":[37.9188032,55.8056979]},"presentationStatus":"active"},{"sourceId":"osm.node.10852613370","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Парк Победы","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.5179675,55.7361688]},"presentationStatus":"active"},{"sourceId":"osm.node.10852613371","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Кунцевская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4459818,55.7307628]},"presentationStatus":"active"},{"sourceId":"osm.node.10852613372","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Нижегородская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.7297964,55.7317169]},"presentationStatus":"active"},{"sourceId":"osm.node.10852613373","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Каширская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6485829,55.6550857]},"presentationStatus":"active"},{"sourceId":"osm.node.10923864099","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Балашиха","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001940","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.9484564,55.8095473]},"presentationStatus":"active"},{"sourceId":"osm.node.11171697213","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Пыхтино","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.295668,55.6245026]},"presentationStatus":"active"},{"sourceId":"osm.node.11171729958","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Аэропорт Внуково","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.2872762,55.607309]},"presentationStatus":"active"},{"sourceId":"osm.node.11174639393","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Физтех","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5465759,55.9216617]},"presentationStatus":"active"},{"sourceId":"osm.node.11174673548","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Яхромская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5454418,55.8798821]},"presentationStatus":"active"},{"sourceId":"osm.node.11174673551","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Лианозово","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.544663,55.898115]},"presentationStatus":"active"},{"sourceId":"osm.node.11179152559","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Кутузовская","category":"railway_station","operator":"ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.533117,55.7416684]},"presentationStatus":"active"},{"sourceId":"osm.node.11179152562","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Поклонная","category":"railway_station","operator":"ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5207706,55.7321196]},"presentationStatus":"active"},{"sourceId":"osm.node.11181858388","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Москва-Сити","category":"railway_station","operator":"ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5303081,55.7504733]},"presentationStatus":"active"},{"sourceId":"osm.node.11187723410","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Грачёвская","category":"railway_station","uic_ref":"2006100","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.5094458,55.8697985]},"presentationStatus":"active"},{"sourceId":"osm.node.11188034787","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Космос","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001133"},"geometry":{"type":"Point","coordinates":[37.8813958,55.4287814]},"presentationStatus":"active"},{"sourceId":"osm.node.11193136333","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Депо","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001956"},"geometry":{"type":"Point","coordinates":[37.7784225,55.4280116]},"presentationStatus":"active"},{"sourceId":"osm.node.11200678676","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Фрязино-Пассажирская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000715"},"geometry":{"type":"Point","coordinates":[38.0441459,55.9634064]},"presentationStatus":"active"},{"sourceId":"osm.node.11200678682","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Фабрика 1 Мая","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2002980"},"geometry":{"type":"Point","coordinates":[37.8613356,55.9465047]},"presentationStatus":"active"},{"sourceId":"osm.node.11217630824","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Усово","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001073"},"geometry":{"type":"Point","coordinates":[37.2130184,55.7293994]},"presentationStatus":"active"},{"sourceId":"osm.node.11217675237","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Барвиха","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001049"},"geometry":{"type":"Point","coordinates":[37.2624841,55.7374575]},"presentationStatus":"active"},{"sourceId":"osm.node.11217675244","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Раздоры","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001098"},"geometry":{"type":"Point","coordinates":[37.2946552,55.7390117]},"presentationStatus":"active"},{"sourceId":"osm.node.11217675307","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Скоротово","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001312"},"geometry":{"type":"Point","coordinates":[36.9140404,55.6786185]},"presentationStatus":"active"},{"sourceId":"osm.node.11217675320","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Хлюпино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001162"},"geometry":{"type":"Point","coordinates":[36.9629484,55.6704851]},"presentationStatus":"active"},{"sourceId":"osm.node.11217675321","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Захарово","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001053"},"geometry":{"type":"Point","coordinates":[36.9761664,55.6470099]},"presentationStatus":"active"},{"sourceId":"osm.node.11217675347","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"174 км","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2002029"},"geometry":{"type":"Point","coordinates":[36.8497976,55.8411931]},"presentationStatus":"active"},{"sourceId":"osm.node.11217675356","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Манихино II","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001864"},"geometry":{"type":"Point","coordinates":[36.9629793,55.9129351]},"presentationStatus":"active"},{"sourceId":"osm.node.11218365167","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"128 км","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001939"},"geometry":{"type":"Point","coordinates":[37.2612108,56.0813491]},"presentationStatus":"active"},{"sourceId":"osm.node.11218365168","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Бухарово","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000716"},"geometry":{"type":"Point","coordinates":[37.2970652,56.0854454]},"presentationStatus":"active"},{"sourceId":"osm.node.11218365169","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"120 км","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001975"},"geometry":{"type":"Point","coordinates":[37.3794613,56.098395]},"presentationStatus":"active"},{"sourceId":"osm.node.11218365174","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"109 км","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000642"},"geometry":{"type":"Point","coordinates":[37.4997128,56.1387128]},"presentationStatus":"active"},{"sourceId":"osm.node.11223293659","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Бахчиванджи","category":"railway_station","operator":"АО «ЦППК»","uic_ref":"2000740"},"geometry":{"type":"Point","coordinates":[38.0835754,55.8826727]},"presentationStatus":"active"},{"sourceId":"osm.node.1123660474","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Курская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6593319,55.7571978]},"presentationStatus":"active"},{"sourceId":"osm.node.11242005525","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Софрино-2","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2002929"},"geometry":{"type":"Point","coordinates":[37.9362617,56.1453545]},"presentationStatus":"active"},{"sourceId":"osm.node.11242187733","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Путилово","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000894"},"geometry":{"type":"Point","coordinates":[38.0947112,56.1158401]},"presentationStatus":"active"},{"sourceId":"osm.node.11242187735","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Рахманово","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001943"},"geometry":{"type":"Point","coordinates":[37.9983026,56.1440269]},"presentationStatus":"active"},{"sourceId":"osm.node.11242187736","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Посёлок Дальний","category":"railway_station","operator":"ОАО «РЖД»","official_name":"Софрино-2","uic_ref":"2002929"},"geometry":{"type":"Point","coordinates":[37.9580051,56.1416636]},"presentationStatus":"active"},{"sourceId":"osm.node.1145722295","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Заводская","category":"railway_station"},"geometry":{"type":"Point","coordinates":[37.7640438,55.563735]},"presentationStatus":"active"},{"sourceId":"osm.node.1157975976","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Белорусская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.583575,55.776702]},"presentationStatus":"active"},{"sourceId":"osm.node.1158396469","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Белорусская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.5840675,55.7761384]},"presentationStatus":"active"},{"sourceId":"osm.node.1167209019","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Москва-Товарная-Смоленская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000274"},"geometry":{"type":"Point","coordinates":[37.5564951,55.7721776]},"presentationStatus":"active"},{"sourceId":"osm.node.12088901167","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Митьково","category":"railway_station","operator":"ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.6714367,55.785603]},"presentationStatus":"active"},{"sourceId":"osm.node.12157560726","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Потапово","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4926212,55.5526401]},"presentationStatus":"active"},{"sourceId":"osm.node.12163102805","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Тютчевская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.4810854,55.61905]},"presentationStatus":"active"},{"sourceId":"osm.node.12163102808","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Генерала Тюленева","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.4857715,55.6262046]},"presentationStatus":"active"},{"sourceId":"osm.node.12163102812","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Университет дружбы народов","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.5071425,55.6479373]},"presentationStatus":"active"},{"sourceId":"osm.node.12163102815","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Новаторская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5213865,55.6715854]},"presentationStatus":"active"},{"sourceId":"osm.node.1221839292","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Коньково","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.5189769,55.6331469]},"presentationStatus":"active"},{"sourceId":"osm.node.1237081656","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Красногорская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000480"},"geometry":{"type":"Point","coordinates":[37.3031942,55.8147417]},"presentationStatus":"active"},{"sourceId":"osm.node.1239263225","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"155 км","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001957"},"geometry":{"type":"Point","coordinates":[37.0109953,55.9613162]},"presentationStatus":"active"},{"sourceId":"osm.node.12460750155","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Корниловская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4789891,55.5983956]},"presentationStatus":"active"},{"sourceId":"osm.node.12460750156","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Коммунарка","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4679907,55.574632]},"presentationStatus":"active"},{"sourceId":"osm.node.12460750157","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Новомосковская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4652781,55.560601]},"presentationStatus":"active"},{"sourceId":"osm.node.1250950202","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"116 км","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2002969"},"geometry":{"type":"Point","coordinates":[37.4243252,56.1256526]},"presentationStatus":"active"},{"sourceId":"osm.node.1267446918","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Малиновка","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001164"},"geometry":{"type":"Point","coordinates":[37.1553863,55.8550943]},"presentationStatus":"active"},{"sourceId":"osm.node.13141233387","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"ЗИЛ","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6452346,55.6969336]},"presentationStatus":"active"},{"sourceId":"osm.node.13141822040","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Крымская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6093943,55.689732]},"presentationStatus":"active"},{"sourceId":"osm.node.13141822043","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Академическая","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.5759825,55.6869446]},"presentationStatus":"active"},{"sourceId":"osm.node.13143504742","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Вавиловская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.5408941,55.6848912]},"presentationStatus":"active"},{"sourceId":"osm.node.136876035","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Текстильщики","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000045"},"geometry":{"type":"Point","coordinates":[37.729528,55.7074863]},"presentationStatus":"active"},{"sourceId":"osm.node.136880164","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Москворечье","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001120"},"geometry":{"type":"Point","coordinates":[37.6900672,55.6412776]},"presentationStatus":"active"},{"sourceId":"osm.node.1380353785","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Чертаново","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001945"},"geometry":{"type":"Point","coordinates":[37.6273775,55.631036]},"presentationStatus":"active"},{"sourceId":"osm.node.1387795431","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Канатчиково","category":"railway_station","operator":"ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.591367,55.7017698]},"presentationStatus":"active"},{"sourceId":"osm.node.1405332172","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Пресня","category":"railway_station","operator":"ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.5171072,55.7665972]},"presentationStatus":"active"},{"sourceId":"osm.node.141135145","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Удельная","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001385"},"geometry":{"type":"Point","coordinates":[38.0442366,55.6345648]},"presentationStatus":"active"},{"sourceId":"osm.node.143411800","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Лобня","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000115"},"geometry":{"type":"Point","coordinates":[37.4848762,56.0135144]},"presentationStatus":"active"},{"sourceId":"osm.node.146573247","semanticType":"map.terminal","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Москва-Рижская","category":"railway_terminal","operator":"ОАО «РЖД»","local_name":"Рижский вокзал;Рижка","uic_ref":"2000008"},"geometry":{"type":"Point","coordinates":[37.6322554,55.795067]},"presentationStatus":"active"},{"sourceId":"osm.node.1467468087","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Николаевка","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000652"},"geometry":{"type":"Point","coordinates":[37.6434145,55.7936401]},"presentationStatus":"active"},{"sourceId":"osm.node.148240095","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Аэропорт-Домодедово","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001305"},"geometry":{"type":"Point","coordinates":[37.8969119,55.4150323]},"presentationStatus":"active"},{"sourceId":"osm.node.148263975","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Бирюлёво-Пассажирская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001110"},"geometry":{"type":"Point","coordinates":[37.6595425,55.5831802]},"presentationStatus":"active"},{"sourceId":"osm.node.1527999919","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Борисово","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.7437524,55.6333039]},"presentationStatus":"active"},{"sourceId":"osm.node.1527999927","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Зябликово","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.745179,55.6122352]},"presentationStatus":"active"},{"sourceId":"osm.node.1527999934","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Шипиловская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.7436392,55.6210274]},"presentationStatus":"active"},{"sourceId":"osm.node.1668628211","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Купавна","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000530"},"geometry":{"type":"Point","coordinates":[38.1210763,55.7531599]},"presentationStatus":"active"},{"sourceId":"osm.node.1699176826","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"177 км","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001958"},"geometry":{"type":"Point","coordinates":[36.8242611,55.8141094]},"presentationStatus":"active"},{"sourceId":"osm.node.1705951317","semanticType":"map.terminal","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Москва-Пассажирская-Павелецкая","category":"railway_terminal","operator":"ОАО «РЖД»","official_name":"Москва-Пассажирская-Павелецкая","uic_ref":"2000005","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.6410311,55.7290949]},"presentationStatus":"active"},{"sourceId":"osm.node.1720249701","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Жилино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000940"},"geometry":{"type":"Point","coordinates":[37.0475764,55.9945519]},"presentationStatus":"active"},{"sourceId":"osm.node.1789031210","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Плющево","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000524"},"geometry":{"type":"Point","coordinates":[37.7741613,55.7308523]},"presentationStatus":"active"},{"sourceId":"osm.node.1834449976","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Поварово III","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000631"},"geometry":{"type":"Point","coordinates":[37.0565584,56.0466815]},"presentationStatus":"active"},{"sourceId":"osm.node.1834455155","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Белый Раст","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000502"},"geometry":{"type":"Point","coordinates":[37.4584299,56.1258243]},"presentationStatus":"active"},{"sourceId":"osm.node.1834455159","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Поварово II","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001090"},"geometry":{"type":"Point","coordinates":[37.1133777,56.0742871]},"presentationStatus":"active"},{"sourceId":"osm.node.1890426555","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Новокосино","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.8637729,55.7450867]},"presentationStatus":"active"},{"sourceId":"osm.node.1932792698","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Одинцово","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000055","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.2818162,55.6719892]},"presentationStatus":"active"},{"sourceId":"osm.node.1985948187","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Лосиноостровская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001125"},"geometry":{"type":"Point","coordinates":[37.6832905,55.8626438]},"presentationStatus":"active"},{"sourceId":"osm.node.1985948190","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Лось","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000165"},"geometry":{"type":"Point","coordinates":[37.7103429,55.8798271]},"presentationStatus":"active"},{"sourceId":"osm.node.1985948193","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Ростокино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000555","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.6698992,55.8410324]},"presentationStatus":"active"},{"sourceId":"osm.node.1987281823","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Перловская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000175"},"geometry":{"type":"Point","coordinates":[37.7247552,55.8891155]},"presentationStatus":"active"},{"sourceId":"osm.node.1987281826","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Тайнинская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000335"},"geometry":{"type":"Point","coordinates":[37.7424432,55.9007891]},"presentationStatus":"active"},{"sourceId":"osm.node.1987604386","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Строитель","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001350"},"geometry":{"type":"Point","coordinates":[37.7832431,55.9330312]},"presentationStatus":"active"},{"sourceId":"osm.node.1987604390","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Тарасовская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001435"},"geometry":{"type":"Point","coordinates":[37.8087079,55.9620481]},"presentationStatus":"active"},{"sourceId":"osm.node.1987604398","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Челюскинская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2002960"},"geometry":{"type":"Point","coordinates":[37.7998727,55.9477624]},"presentationStatus":"active"},{"sourceId":"osm.node.1987901070","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Кучино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001190","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.9547503,55.7521154]},"presentationStatus":"active"},{"sourceId":"osm.node.1987915416","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Жаворонки","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000550","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.0974868,55.6419554]},"presentationStatus":"active"},{"sourceId":"osm.node.1987939214","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Калитники","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000200"},"geometry":{"type":"Point","coordinates":[37.7026604,55.7336718]},"presentationStatus":"active"},{"sourceId":"osm.node.1987939218","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Царицыно","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000225"},"geometry":{"type":"Point","coordinates":[37.6688476,55.6185151]},"presentationStatus":"active"},{"sourceId":"osm.node.1987941102","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Львовская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000615"},"geometry":{"type":"Point","coordinates":[37.5154586,55.3123577]},"presentationStatus":"active"},{"sourceId":"osm.node.1988289122","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Фирсановская","category":"railway_station","operator":"ОАО «РЖД»","local_name":"Фирсановка","uic_ref":"2005215","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.2496983,55.9606235]},"presentationStatus":"active"},{"sourceId":"osm.node.1988800418","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Люблино-Сортировочное","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001938"},"geometry":{"type":"Point","coordinates":[37.7300731,55.6715844]},"presentationStatus":"active"},{"sourceId":"osm.node.1990541219","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Депо","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2002780"},"geometry":{"type":"Point","coordinates":[37.7281785,55.6742129]},"presentationStatus":"active"},{"sourceId":"osm.node.1990631971","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Битца","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000037"},"geometry":{"type":"Point","coordinates":[37.611564,55.5712828]},"presentationStatus":"active"},{"sourceId":"osm.node.1990631973","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Бутово","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000630"},"geometry":{"type":"Point","coordinates":[37.570569,55.5413464]},"presentationStatus":"active"},{"sourceId":"osm.node.1990631995","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Савёловская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000744"},"geometry":{"type":"Point","coordinates":[37.5907321,55.7948379]},"presentationStatus":"active"},{"sourceId":"osm.node.1990632001","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Силикатная","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2002952"},"geometry":{"type":"Point","coordinates":[37.5554476,55.4704356]},"presentationStatus":"active"},{"sourceId":"osm.node.1990632020","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Сушкинская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000111","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[36.8738108,55.6112063]},"presentationStatus":"active"},{"sourceId":"osm.node.1990632047","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Щербинка","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000285"},"geometry":{"type":"Point","coordinates":[37.5621844,55.5101252]},"presentationStatus":"active"},{"sourceId":"osm.node.1991411798","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Апрелевка","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000440","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.0668777,55.5500875]},"presentationStatus":"active"},{"sourceId":"osm.node.1991411801","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Победа","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001119"},"geometry":{"type":"Point","coordinates":[37.0927458,55.5660688]},"presentationStatus":"active"},{"sourceId":"osm.node.1991442433","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Дачная","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2002996"},"geometry":{"type":"Point","coordinates":[37.0362931,55.5404743]},"presentationStatus":"active"},{"sourceId":"osm.node.1991442436","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Кокошкино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000525","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.1711886,55.5997295]},"presentationStatus":"active"},{"sourceId":"osm.node.1991442439","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Крёкшино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2002088","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.1097363,55.5778111]},"presentationStatus":"active"},{"sourceId":"osm.node.1991442444","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Селятино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000745"},"geometry":{"type":"Point","coordinates":[36.96727,55.51659]},"presentationStatus":"active"},{"sourceId":"osm.node.1994411890","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Бескудниково","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001240","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.5677763,55.882782]},"presentationStatus":"active"},{"sourceId":"osm.node.1994411894","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Водники","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001340"},"geometry":{"type":"Point","coordinates":[37.5123821,55.9526464]},"presentationStatus":"active"},{"sourceId":"osm.node.1994411898","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Дегунино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000455"},"geometry":{"type":"Point","coordinates":[37.5730917,55.8659187]},"presentationStatus":"active"},{"sourceId":"osm.node.1994411900","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Депо","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2003966"},"geometry":{"type":"Point","coordinates":[37.4865196,56.0280903]},"presentationStatus":"active"},{"sourceId":"osm.node.1994411903","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Долгопрудная","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000100","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5199873,55.9401269]},"presentationStatus":"active"},{"sourceId":"osm.node.1994411907","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Крюково","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2006200","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.1739643,55.9802209]},"presentationStatus":"active"},{"sourceId":"osm.node.1994411912","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Лианозово","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000185"},"geometry":{"type":"Point","coordinates":[37.5491042,55.8988378]},"presentationStatus":"active"},{"sourceId":"osm.node.1994411919","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Марк","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2002077"},"geometry":{"type":"Point","coordinates":[37.5382527,55.9045015]},"presentationStatus":"active"},{"sourceId":"osm.node.1994411922","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Новодачная","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000600","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5279971,55.9243032]},"presentationStatus":"active"},{"sourceId":"osm.node.1994411924","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Окружная","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001270","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.574264,55.8475891]},"presentationStatus":"active"},{"sourceId":"osm.node.1994411933","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Радищево","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2005376"},"geometry":{"type":"Point","coordinates":[37.1022838,56.0416126]},"presentationStatus":"active"},{"sourceId":"osm.node.1994411938","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Хлебниково","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000620"},"geometry":{"type":"Point","coordinates":[37.5045115,55.9709578]},"presentationStatus":"active"},{"sourceId":"osm.node.1994411941","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Шереметьевская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001775"},"geometry":{"type":"Point","coordinates":[37.498885,55.9837326]},"presentationStatus":"active"},{"sourceId":"osm.node.1994527059","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Красный Строитель","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001420","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.615322,55.5903775]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609542","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Снегири","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000810"},"geometry":{"type":"Point","coordinates":[37.0382393,55.8801086]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609589","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Быково","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000255"},"geometry":{"type":"Point","coordinates":[38.0712553,55.6266127]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609593","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Вешняки","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001445"},"geometry":{"type":"Point","coordinates":[37.7982915,55.722381]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609602","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Выхино","category":"railway_station","operator":"ОАО «РЖД»","local_name":"Вышка","uic_ref":"2001000"},"geometry":{"type":"Point","coordinates":[37.8172254,55.7161695]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609607","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Вялки","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001227"},"geometry":{"type":"Point","coordinates":[38.1118755,55.6479884]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609623","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Есино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001212"},"geometry":{"type":"Point","coordinates":[38.3785073,55.7202615]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609628","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Ильинская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001405"},"geometry":{"type":"Point","coordinates":[38.100266,55.6163469]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609638","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Коренёво","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000288"},"geometry":{"type":"Point","coordinates":[38.0006963,55.6681327]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609642","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Косино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001019","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.8474691,55.7059572]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609645","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Красково","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001835"},"geometry":{"type":"Point","coordinates":[37.9822693,55.6498722]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609647","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Кратово","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000805"},"geometry":{"type":"Point","coordinates":[38.1602062,55.5918258]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609655","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Люберцы I","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001020"},"geometry":{"type":"Point","coordinates":[37.896703,55.68249]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609660","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Люберцы II","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001182"},"geometry":{"type":"Point","coordinates":[37.9333995,55.6726546]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609663","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Малаховка","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001180"},"geometry":{"type":"Point","coordinates":[38.0074342,55.6454061]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609665","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Манихино I","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001044","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[36.9294917,55.8906843]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609671","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Миитовская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000004"},"geometry":{"type":"Point","coordinates":[37.1035725,55.8744135]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609683","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Авиамоторная","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001030","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.7219166,55.7503185]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609699","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Овражки","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001193"},"geometry":{"type":"Point","coordinates":[38.0334718,55.6647236]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609717","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Отдых","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2002090"},"geometry":{"type":"Point","coordinates":[38.1369928,55.6013753]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609723","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Панки","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001390"},"geometry":{"type":"Point","coordinates":[37.9231147,55.6687009]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609746","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Перово","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000265"},"geometry":{"type":"Point","coordinates":[37.7644261,55.7358077]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609766","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Покровское","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000595"},"geometry":{"type":"Point","coordinates":[37.6319239,55.6027613]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609794","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Раменское","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001290"},"geometry":{"type":"Point","coordinates":[38.2262173,55.5651537]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609812","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Серп и молот","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001230","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6821726,55.7482349]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609818","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Совхоз","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000104"},"geometry":{"type":"Point","coordinates":[38.2941047,55.5408227]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609821","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Томилино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001260"},"geometry":{"type":"Point","coordinates":[37.9550406,55.6550749]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609824","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Троицкая","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001186"},"geometry":{"type":"Point","coordinates":[36.9009936,55.8861918]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609829","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Ухтомская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000490"},"geometry":{"type":"Point","coordinates":[37.8645031,55.6986272]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609835","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Фабричная","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000295"},"geometry":{"type":"Point","coordinates":[38.2065967,55.5728488]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609840","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Андроновка","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001770"},"geometry":{"type":"Point","coordinates":[37.7408127,55.7447009]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609868","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Есенинская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000875"},"geometry":{"type":"Point","coordinates":[38.1834318,55.5823579]},"presentationStatus":"active"},{"sourceId":"osm.node.1994609871","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Ипподром","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000535"},"geometry":{"type":"Point","coordinates":[38.238988,55.5604851]},"presentationStatus":"active"},{"sourceId":"osm.node.1994637881","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Химки","category":"railway_station","network":"Октябрьская железная дорога","operator":"ОАО «РЖД»","uic_ref":"2005000","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.4536637,55.8936153]},"presentationStatus":"active"},{"sourceId":"osm.node.1994650454","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Беговая","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001060"},"geometry":{"type":"Point","coordinates":[37.5403967,55.7716951]},"presentationStatus":"active"},{"sourceId":"osm.node.1994650464","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Рабочий Посёлок","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000245","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.418512,55.726968]},"presentationStatus":"active"},{"sourceId":"osm.node.1994650466","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Ромашково","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001074"},"geometry":{"type":"Point","coordinates":[37.3476164,55.7341731]},"presentationStatus":"active"},{"sourceId":"osm.node.1994650475","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Фили","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000155","wheelchair":"limited"},"geometry":{"type":"Point","coordinates":[37.514551,55.7440926]},"presentationStatus":"active"},{"sourceId":"osm.node.1994671353","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Моссельмаш","category":"railway_station","uic_ref":"2005080","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.5283556,55.8617302]},"presentationStatus":"active"},{"sourceId":"osm.node.1994671356","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Лихоборы","category":"railway_station","uic_ref":"2004764","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5521848,55.8502936]},"presentationStatus":"active"},{"sourceId":"osm.node.1994671361","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Останкино","category":"railway_station","uic_ref":"2005110","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6032169,55.8175016]},"presentationStatus":"active"},{"sourceId":"osm.node.1994671368","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Петровско-Разумовская","category":"railway_station","uic_ref":"2005060","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.5687175,55.8396207]},"presentationStatus":"active"},{"sourceId":"osm.node.1994682649","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Кусково","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001066","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.7953827,55.7397339]},"presentationStatus":"active"},{"sourceId":"osm.node.2000351174","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Весенняя","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000545"},"geometry":{"type":"Point","coordinates":[37.534593,55.3852867]},"presentationStatus":"active"},{"sourceId":"osm.node.2000351183","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Подольск","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000065"},"geometry":{"type":"Point","coordinates":[37.5654172,55.4317986]},"presentationStatus":"active"},{"sourceId":"osm.node.2000431023","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Красный Балтиец","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001425"},"geometry":{"type":"Point","coordinates":[37.5248787,55.8154548]},"presentationStatus":"active"},{"sourceId":"osm.node.2000431032","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Сортировочная","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000680"},"geometry":{"type":"Point","coordinates":[37.7207756,55.7635658]},"presentationStatus":"active"},{"sourceId":"osm.node.2000431037","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Электрозаводская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001040","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.7053772,55.7811057]},"presentationStatus":"active"},{"sourceId":"osm.node.2000568565","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Белые Столбы","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001765","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.8509317,55.3334705]},"presentationStatus":"active"},{"sourceId":"osm.node.2000568566","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Взлётная","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2002975","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.8054339,55.3950272]},"presentationStatus":"active"},{"sourceId":"osm.node.2000568569","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Ленинская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001830"},"geometry":{"type":"Point","coordinates":[37.7312745,55.4886334]},"presentationStatus":"active"},{"sourceId":"osm.node.2000568584","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"32 км","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000466"},"geometry":{"type":"Point","coordinates":[37.7474946,55.4728668]},"presentationStatus":"active"},{"sourceId":"osm.node.2001755270","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Аникеевка","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001194"},"geometry":{"type":"Point","coordinates":[37.2200282,55.8320515]},"presentationStatus":"active"},{"sourceId":"osm.node.2001755273","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Дедовск","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000205"},"geometry":{"type":"Point","coordinates":[37.1256813,55.8667313]},"presentationStatus":"active"},{"sourceId":"osm.node.2001755276","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Нахабино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000460"},"geometry":{"type":"Point","coordinates":[37.184911,55.8415879]},"presentationStatus":"active"},{"sourceId":"osm.node.2001755278","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Опалиха","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000720"},"geometry":{"type":"Point","coordinates":[37.2485361,55.822766]},"presentationStatus":"active"},{"sourceId":"osm.node.2001755280","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Павшино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2003960"},"geometry":{"type":"Point","coordinates":[37.3395149,55.8148976]},"presentationStatus":"active"},{"sourceId":"osm.node.2001755299","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Расторгуево","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000135"},"geometry":{"type":"Point","coordinates":[37.6864421,55.5481921]},"presentationStatus":"active"},{"sourceId":"osm.node.2001755300","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Тимирязевская","category":"railway_station","operator":"ОАО «РЖД»","local_name":"Тимирязевка","uic_ref":"2003965","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5760049,55.8192175]},"presentationStatus":"active"},{"sourceId":"osm.node.2001755301","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Трикотажная","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001840"},"geometry":{"type":"Point","coordinates":[37.3993378,55.833085]},"presentationStatus":"active"},{"sourceId":"osm.node.2001755305","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Тушинская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000075"},"geometry":{"type":"Point","coordinates":[37.4410998,55.8270524]},"presentationStatus":"active"},{"sourceId":"osm.node.2001755309","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Калинина","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001039"},"geometry":{"type":"Point","coordinates":[37.7079731,55.5166157]},"presentationStatus":"active"},{"sourceId":"osm.node.2005883653","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Домодедово","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000145","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.7731873,55.4400646]},"presentationStatus":"active"},{"sourceId":"osm.node.2012486868","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Новоподрезково","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2005003","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.3510758,55.9370106]},"presentationStatus":"active"},{"sourceId":"osm.node.2012486869","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Молжаниново","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2005250","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.3813237,55.9242081]},"presentationStatus":"active"},{"sourceId":"osm.node.2012486870","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Подрезково","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2005005","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.330249,55.9426816]},"presentationStatus":"active"},{"sourceId":"osm.node.2023211069","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Дербеневская","category":"railway_station","operator":"ОАО «РЖД»","official_name":"Москва-Товарная-Павелецкая","uic_ref":"2001825"},"geometry":{"type":"Point","coordinates":[37.6433584,55.7175334]},"presentationStatus":"active"},{"sourceId":"osm.node.2023211071","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Нагатинская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001750","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6208766,55.6822514]},"presentationStatus":"active"},{"sourceId":"osm.node.2023436702","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Поваровка","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2005010"},"geometry":{"type":"Point","coordinates":[37.0768059,56.0638507]},"presentationStatus":"active"},{"sourceId":"osm.node.2080924763","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Алма-Атинская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.765935,55.6327995]},"presentationStatus":"active"},{"sourceId":"osm.node.2101832212","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Пятницкое шоссе","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.3542024,55.856143]},"presentationStatus":"active"},{"sourceId":"osm.node.2166561859","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Обменная","category":"railway_station"},"geometry":{"type":"Point","coordinates":[37.6738654,55.5890429]},"presentationStatus":"active"},{"sourceId":"osm.node.220196839","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Кожухово","category":"railway_station","operator":"ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.6512864,55.699905]},"presentationStatus":"active"},{"sourceId":"osm.node.220203803","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Угрешская","category":"railway_station","operator":"ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.6874448,55.7154769]},"presentationStatus":"active"},{"sourceId":"osm.node.2261673394","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Реутов","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000130","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.8556312,55.7515634]},"presentationStatus":"active"},{"sourceId":"osm.node.2261680950","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Никольское","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000515","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.8971521,55.7595549]},"presentationStatus":"active"},{"sourceId":"osm.node.2281272965","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Авиационная","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000505"},"geometry":{"type":"Point","coordinates":[37.8358311,55.4224224]},"presentationStatus":"active"},{"sourceId":"osm.node.2285182785","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Чёрное","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000640"},"geometry":{"type":"Point","coordinates":[38.0598061,55.7531863]},"presentationStatus":"active"},{"sourceId":"osm.node.2290579393","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"165 км","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001849","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[36.938313,55.8880065]},"presentationStatus":"active"},{"sourceId":"osm.node.2334801351","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Новопеределкино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001004"},"geometry":{"type":"Point","coordinates":[37.3828417,55.6382763]},"presentationStatus":"active"},{"sourceId":"osm.node.241158259","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Филёвский парк","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4833717,55.7395085]},"presentationStatus":"active"},{"sourceId":"osm.node.241158281","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Багратионовская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Багры","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.497737,55.7437316]},"presentationStatus":"active"},{"sourceId":"osm.node.241158327","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Фили","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5148273,55.7461266]},"presentationStatus":"active"},{"sourceId":"osm.node.241158369","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Кутузовская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.5343862,55.7399906]},"presentationStatus":"active"},{"sourceId":"osm.node.241158415","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Студенческая","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5484101,55.7388299]},"presentationStatus":"active"},{"sourceId":"osm.node.242546355","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Электрозаводская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.7037878,55.7817132]},"presentationStatus":"active"},{"sourceId":"osm.node.242546356","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Бауманская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Бауманка"},"geometry":{"type":"Point","coordinates":[37.6805494,55.7730392]},"presentationStatus":"active"},{"sourceId":"osm.node.242546475","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Площадь Революции","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6217842,55.7566512]},"presentationStatus":"active"},{"sourceId":"osm.node.242546476","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Арбатская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6069779,55.752095]},"presentationStatus":"active"},{"sourceId":"osm.node.244036228","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Молодёжная","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.4169385,55.7407572]},"presentationStatus":"active"},{"sourceId":"osm.node.244036856","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Пионерская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Пионерка","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4671358,55.7359875]},"presentationStatus":"active"},{"sourceId":"osm.node.248916189","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Железнодорожная","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001070","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[38.0082811,55.7524929]},"presentationStatus":"active"},{"sourceId":"osm.node.2504903003","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Крюково-Грузовое","category":"railway_station"},"geometry":{"type":"Point","coordinates":[37.193292,56.0056281]},"presentationStatus":"active"},{"sourceId":"osm.node.250536465","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Салтыковская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001370","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.923137,55.7575888]},"presentationStatus":"active"},{"sourceId":"osm.node.2525101862","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Жулебино","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.8562939,55.685438]},"presentationStatus":"active"},{"sourceId":"osm.node.2525101863","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Лермонтовский проспект","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.8519732,55.7016254]},"presentationStatus":"active"},{"sourceId":"osm.node.252828224","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Смоленская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.5818245,55.747394]},"presentationStatus":"active"},{"sourceId":"osm.node.252934400","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Кузнецкий Мост","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6261429,55.7607508]},"presentationStatus":"active"},{"sourceId":"osm.node.253016890","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Таганская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Таганка"},"geometry":{"type":"Point","coordinates":[37.6518996,55.740465]},"presentationStatus":"active"},{"sourceId":"osm.node.253016891","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Пролетарская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6658787,55.731857]},"presentationStatus":"active"},{"sourceId":"osm.node.253016892","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Волгоградский проспект","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6868906,55.7252386]},"presentationStatus":"active"},{"sourceId":"osm.node.253016893","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Текстильщики","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.7315039,55.7088138]},"presentationStatus":"active"},{"sourceId":"osm.node.253016894","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Кузьминки","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.7657844,55.7056021]},"presentationStatus":"active"},{"sourceId":"osm.node.253016895","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Выхино","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.8179229,55.7156444]},"presentationStatus":"active"},{"sourceId":"osm.node.253017004","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Рязанский проспект","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.7933151,55.716947]},"presentationStatus":"active"},{"sourceId":"osm.node.253043175","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Арбатская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6006567,55.7518523]},"presentationStatus":"active"},{"sourceId":"osm.node.253045735","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Деловой центр","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.5413666,55.7500874]},"presentationStatus":"active"},{"sourceId":"osm.node.253213262","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Тестовская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000700","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.532969,55.757123]},"presentationStatus":"active"},{"sourceId":"osm.node.253228506","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Александровский сад","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6086825,55.7524027]},"presentationStatus":"active"},{"sourceId":"osm.node.253323288","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Ильинское","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001057"},"geometry":{"type":"Point","coordinates":[37.2411935,55.733715]},"presentationStatus":"active"},{"sourceId":"osm.node.253334673","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Звенигород","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000725","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[36.8793818,55.70026]},"presentationStatus":"active"},{"sourceId":"osm.node.253335716","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Отрадное","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000570","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.2503157,55.6677773]},"presentationStatus":"active"},{"sourceId":"osm.node.253335932","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Здравница","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2002097","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.1515925,55.6502689]},"presentationStatus":"active"},{"sourceId":"osm.node.253336285","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Дачное","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001137","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.0666175,55.6360983]},"presentationStatus":"active"},{"sourceId":"osm.node.253336397","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Малые Вязёмы","category":"railway_station","operator":"ОАО «РЖД»","official_name":"Малая Вязёма","uic_ref":"2001052","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.029341,55.6263604]},"presentationStatus":"active"},{"sourceId":"osm.node.253337001","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Голицыно","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2002920","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[36.9867352,55.6151881]},"presentationStatus":"active"},{"sourceId":"osm.node.253375111","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Киевская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.5656452,55.7436835]},"presentationStatus":"active"},{"sourceId":"osm.node.253780238","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Славянский бульвар","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4707878,55.7295963]},"presentationStatus":"active"},{"sourceId":"osm.node.255744331","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Новогиреево","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.8167454,55.751769]},"presentationStatus":"active"},{"sourceId":"osm.node.255744332","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Перово","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.7864823,55.7511973]},"presentationStatus":"active"},{"sourceId":"osm.node.255744578","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Шоссе Энтузиастов","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.7494868,55.7575686]},"presentationStatus":"active"},{"sourceId":"osm.node.255856078","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Москва-Сити","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.5342309,55.7483053]},"presentationStatus":"active"},{"sourceId":"osm.node.256104649","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Родники","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2002092"},"geometry":{"type":"Point","coordinates":[38.0678689,55.6558293]},"presentationStatus":"active"},{"sourceId":"osm.node.258669700","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Стройка","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000169"},"geometry":{"type":"Point","coordinates":[37.8628505,55.780069]},"presentationStatus":"active"},{"sourceId":"osm.node.2591395115","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Лесопарковая","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5768918,55.5820975]},"presentationStatus":"active"},{"sourceId":"osm.node.2591402980","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Битцевский парк","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5563789,55.6002393]},"presentationStatus":"active"},{"sourceId":"osm.node.259630429","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Электроугли","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001325"},"geometry":{"type":"Point","coordinates":[38.2022213,55.7301418]},"presentationStatus":"active"},{"sourceId":"osm.node.259785706","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Тёплый Стан","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.5082183,55.6188619]},"presentationStatus":"active"},{"sourceId":"osm.node.259786804","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Калужская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.5405263,55.657091]},"presentationStatus":"active"},{"sourceId":"osm.node.259786806","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Новые Черёмушки","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.5546984,55.6702787]},"presentationStatus":"active"},{"sourceId":"osm.node.2635328582","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Лукино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001903","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[36.8799897,55.8564199]},"presentationStatus":"active"},{"sourceId":"osm.node.2639103519","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"159 км","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000948"},"geometry":{"type":"Point","coordinates":[36.9984531,55.9287624]},"presentationStatus":"active"},{"sourceId":"osm.node.264162888","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Ясенево","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.533407,55.6063062]},"presentationStatus":"active"},{"sourceId":"osm.node.265949954","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Бульвар Рокоссовского","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Подбелка"},"geometry":{"type":"Point","coordinates":[37.73434,55.8146824]},"presentationStatus":"active"},{"sourceId":"osm.node.265949956","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Черкизовская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.7450321,55.8038807]},"presentationStatus":"active"},{"sourceId":"osm.node.265949958","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Преображенская площадь","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Преображенка","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.7153466,55.7963698]},"presentationStatus":"active"},{"sourceId":"osm.node.266426836","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Лихоборы","category":"railway_station","operator":"ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.5304764,55.842712]},"presentationStatus":"active"},{"sourceId":"osm.node.266429650","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Гражданская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001410"},"geometry":{"type":"Point","coordinates":[37.5532288,55.8055538]},"presentationStatus":"active"},{"sourceId":"osm.node.266835841","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Речной вокзал","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Речник"},"geometry":{"type":"Point","coordinates":[37.4762129,55.8550132]},"presentationStatus":"active"},{"sourceId":"osm.node.266835844","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Водный стадион","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Водник"},"geometry":{"type":"Point","coordinates":[37.4867105,55.8400589]},"presentationStatus":"active"},{"sourceId":"osm.node.266835845","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Войковская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Войковка"},"geometry":{"type":"Point","coordinates":[37.4980181,55.819052]},"presentationStatus":"active"},{"sourceId":"osm.node.266835847","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Аэропорт","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.5331501,55.8003966]},"presentationStatus":"active"},{"sourceId":"osm.node.266835848","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Динамо","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.558208,55.7897397]},"presentationStatus":"active"},{"sourceId":"osm.node.267334996","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Сокольники","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6802525,55.7888168]},"presentationStatus":"active"},{"sourceId":"osm.node.267335088","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Комсомольская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6560339,55.7752083]},"presentationStatus":"active"},{"sourceId":"osm.node.267335089","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Красносельская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6676557,55.780356]},"presentationStatus":"active"},{"sourceId":"osm.node.267335315","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Охотный ряд","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6165101,55.7577723]},"presentationStatus":"active"},{"sourceId":"osm.node.267335316","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Лубянка","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6278554,55.7598728]},"presentationStatus":"active"},{"sourceId":"osm.node.267335317","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Чистые пруды","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"ЧП;Чистаки","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.639028,55.7658711]},"presentationStatus":"active"},{"sourceId":"osm.node.267772268","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Яничкино","category":"railway_station","operator":"ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.8596249,55.6534701]},"presentationStatus":"active"},{"sourceId":"osm.node.268521588","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Свиблово","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.652706,55.8552129]},"presentationStatus":"active"},{"sourceId":"osm.node.268521591","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Ботанический сад","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Ботсад"},"geometry":{"type":"Point","coordinates":[37.6382462,55.8448445]},"presentationStatus":"active"},{"sourceId":"osm.node.268588155","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Икша","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001077","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.5092777,56.1718602]},"presentationStatus":"active"},{"sourceId":"osm.node.2687590616","semanticType":"map.terminal","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Москва-Пассажирская-Смоленская","category":"railway_terminal","operator":"ОАО «РЖД»","official_name":"Москва-Пассажирская-Смоленская","uic_ref":"2000006","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5803618,55.7763133]},"presentationStatus":"active"},{"sourceId":"osm.node.2687590617","semanticType":"map.terminal","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Москва-Бутырская","category":"railway_terminal","operator":"ОАО «РЖД»","local_name":"Савёла","uic_ref":"2000009"},"geometry":{"type":"Point","coordinates":[37.5887393,55.7955692]},"presentationStatus":"active"},{"sourceId":"osm.node.2687602339","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Москва-Пассажирская-Киевская","category":"railway_station","operator":"ОАО «РЖД»","official_name":"Москва-Пассажирская-Киевская","local_name":"Кивуха","uic_ref":"2000007"},"geometry":{"type":"Point","coordinates":[37.5628449,55.7420034]},"presentationStatus":"active"},{"sourceId":"osm.node.2692857848","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Измайловская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Измайловка","wheelchair":"limited"},"geometry":{"type":"Point","coordinates":[37.7816023,55.7877328]},"presentationStatus":"active"},{"sourceId":"osm.node.2692882978","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Первомайская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Первомайка","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.7993959,55.7947265]},"presentationStatus":"active"},{"sourceId":"osm.node.2692905506","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Щёлковская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.7985725,55.8093369]},"presentationStatus":"active"},{"sourceId":"osm.node.2699008011","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Москва-Товарная","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2005480"},"geometry":{"type":"Point","coordinates":[37.6262201,55.8024495]},"presentationStatus":"active"},{"sourceId":"osm.node.26999673","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Москва-Пассажирская","category":"railway_station","network":"Октябрьская железная дорога","operator":"ОАО «РЖД»","official_name":"Москва-Пассажирская","local_name":"Москва-Ленинградская","uic_ref":"2006004","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.6537207,55.7788343]},"presentationStatus":"active"},{"sourceId":"osm.node.26999985","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Сходня","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2005090","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.2990008,55.9496529]},"presentationStatus":"active"},{"sourceId":"osm.node.270332125","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Правда","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000465"},"geometry":{"type":"Point","coordinates":[37.8677454,56.0647413]},"presentationStatus":"active"},{"sourceId":"osm.node.270332126","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Заветы Ильича","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000800"},"geometry":{"type":"Point","coordinates":[37.8542866,56.0399024]},"presentationStatus":"active"},{"sourceId":"osm.node.270332134","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Пушкино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000035"},"geometry":{"type":"Point","coordinates":[37.8393723,56.0121205]},"presentationStatus":"active"},{"sourceId":"osm.node.270332136","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Клязьма","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000585"},"geometry":{"type":"Point","coordinates":[37.8190275,55.9785782]},"presentationStatus":"active"},{"sourceId":"osm.node.271147848","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Хрипань","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001236"},"geometry":{"type":"Point","coordinates":[38.1754254,55.638633]},"presentationStatus":"active"},{"sourceId":"osm.node.271395870","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"142 км","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000358"},"geometry":{"type":"Point","coordinates":[37.0760998,56.0591111]},"presentationStatus":"active"},{"sourceId":"osm.node.271395891","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Депо","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001956"},"geometry":{"type":"Point","coordinates":[37.0544263,56.0326183]},"presentationStatus":"active"},{"sourceId":"osm.node.2750740151","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Детская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001001"},"geometry":{"type":"Point","coordinates":[37.9619456,55.9681495]},"presentationStatus":"active"},{"sourceId":"osm.node.276191013","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Авиамоторная","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.7200631,55.7525349]},"presentationStatus":"active"},{"sourceId":"osm.node.276191299","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Площадь Ильича","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6831971,55.7471964]},"presentationStatus":"active"},{"sourceId":"osm.node.276191577","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Марксистская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6535345,55.7413164]},"presentationStatus":"active"},{"sourceId":"osm.node.277499099","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Рижская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Рижка","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6364976,55.7937015]},"presentationStatus":"active"},{"sourceId":"osm.node.277499848","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Проспект Мира","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6319812,55.7808506]},"presentationStatus":"active"},{"sourceId":"osm.node.277499849","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Сухаревская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Сухаревка"},"geometry":{"type":"Point","coordinates":[37.6312038,55.7729551]},"presentationStatus":"active"},{"sourceId":"osm.node.277499850","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Тургеневская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Тургеневка"},"geometry":{"type":"Point","coordinates":[37.637467,55.766492]},"presentationStatus":"active"},{"sourceId":"osm.node.277499852","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Третьяковская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6273436,55.7409166]},"presentationStatus":"active"},{"sourceId":"osm.node.277499853","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Октябрьская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6109093,55.7304961]},"presentationStatus":"active"},{"sourceId":"osm.node.277499854","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Шаболовская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6076956,55.7199872]},"presentationStatus":"active"},{"sourceId":"osm.node.277523022","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Гривно","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000495"},"geometry":{"type":"Point","coordinates":[37.5268085,55.3566852]},"presentationStatus":"active"},{"sourceId":"osm.node.277544808","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Внуково","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2002950","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.2695269,55.648962]},"presentationStatus":"active"},{"sourceId":"osm.node.278692957","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Кропоткинская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.603807,55.7454302]},"presentationStatus":"active"},{"sourceId":"osm.node.278692958","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Библиотека имени Ленина","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Библиотека"},"geometry":{"type":"Point","coordinates":[37.6101708,55.7512323]},"presentationStatus":"active"},{"sourceId":"osm.node.278693055","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Спортивная","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.5642133,55.7233833]},"presentationStatus":"active"},{"sourceId":"osm.node.278693056","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Фрунзенская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.57833,55.7268793]},"presentationStatus":"active"},{"sourceId":"osm.node.2819447355","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Стрешнево","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001085","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4901015,55.8152358]},"presentationStatus":"active"},{"sourceId":"osm.node.282411334","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Ленинский проспект","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.5862116,55.7076167]},"presentationStatus":"active"},{"sourceId":"osm.node.282413851","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Академическая","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.5735148,55.6878077]},"presentationStatus":"active"},{"sourceId":"osm.node.282414382","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Профсоюзная","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.5629043,55.6779304]},"presentationStatus":"active"},{"sourceId":"osm.node.282416839","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Беляево","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.5256804,55.6427774]},"presentationStatus":"active"},{"sourceId":"osm.node.283596980","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Аэропорт Шереметьево. Терминалы D, E, F","category":"railway_station","uic_ref":"2001100"},"geometry":{"type":"Point","coordinates":[37.4174985,55.9641001]},"presentationStatus":"active"},{"sourceId":"osm.node.291686079","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Парк Культуры","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.5913019,55.735811]},"presentationStatus":"active"},{"sourceId":"osm.node.291686160","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Октябрьская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.6093994,55.7297787]},"presentationStatus":"active"},{"sourceId":"osm.node.291687197","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Смоленская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5827207,55.7488081]},"presentationStatus":"active"},{"sourceId":"osm.node.291687455","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Маяковская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Маяковка","wheelchair":"limited"},"geometry":{"type":"Point","coordinates":[37.5950872,55.7701709]},"presentationStatus":"active"},{"sourceId":"osm.node.291689166","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Цветной бульвар","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6179101,55.7708721]},"presentationStatus":"active"},{"sourceId":"osm.node.291712231","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Новоясеневская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.554139,55.6009942]},"presentationStatus":"active"},{"sourceId":"osm.node.292019726","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Павелецкая","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6378407,55.7304982]},"presentationStatus":"active"},{"sourceId":"osm.node.292019996","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Павелецкая","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6381483,55.7323172]},"presentationStatus":"active"},{"sourceId":"osm.node.292143794","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Театральная","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6191912,55.7575071]},"presentationStatus":"active"},{"sourceId":"osm.node.292143796","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Новокузнецкая","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6292018,55.7414344]},"presentationStatus":"active"},{"sourceId":"osm.node.292144111","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Тверская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.606313,55.7648953]},"presentationStatus":"active"},{"sourceId":"osm.node.292146578","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Автозаводская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6577684,55.7073446]},"presentationStatus":"active"},{"sourceId":"osm.node.292147581","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Коломенская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6639248,55.6784809]},"presentationStatus":"active"},{"sourceId":"osm.node.292148161","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Технопарк","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6644353,55.6936232]},"presentationStatus":"active"},{"sourceId":"osm.node.292789222","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Варшавская","category":"railway_station","operator":"ОАО «РЖД»","official_name":"Коломенское","uic_ref":"2001050","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6221979,55.654956]},"presentationStatus":"active"},{"sourceId":"osm.node.293799708","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Проспект Мира","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6317532,55.7796332]},"presentationStatus":"active"},{"sourceId":"osm.node.294024698","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Добрынинская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6244196,55.7291072]},"presentationStatus":"active"},{"sourceId":"osm.node.2950850833","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Парк Победы","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.518219,55.7365232]},"presentationStatus":"active"},{"sourceId":"osm.node.296045315","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Таганская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Таганка"},"geometry":{"type":"Point","coordinates":[37.6513234,55.741665]},"presentationStatus":"active"},{"sourceId":"osm.node.296932663","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Улица Скобелевская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5546254,55.5481082]},"presentationStatus":"active"},{"sourceId":"osm.node.296932668","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Бульвар Адмирала Ушакова","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5432114,55.5454337]},"presentationStatus":"active"},{"sourceId":"osm.node.296932670","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Улица Горчакова","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.530718,55.5416949]},"presentationStatus":"active"},{"sourceId":"osm.node.296932673","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Бунинская аллея","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5165467,55.5381467]},"presentationStatus":"active"},{"sourceId":"osm.node.296944258","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Трубная","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6195511,55.7691136]},"presentationStatus":"active"},{"sourceId":"osm.node.296947177","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Римская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.683251,55.7463418]},"presentationStatus":"active"},{"sourceId":"osm.node.296947185","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Дубровка","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6755406,55.7192085]},"presentationStatus":"active"},{"sourceId":"osm.node.296949274","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Кожуховская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6846176,55.7075865]},"presentationStatus":"active"},{"sourceId":"osm.node.296949278","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Печатники","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.726952,55.6934907]},"presentationStatus":"active"},{"sourceId":"osm.node.296949283","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Волжская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.7531007,55.6908257]},"presentationStatus":"active"},{"sourceId":"osm.node.296949285","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Люблино","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.7619581,55.6757211]},"presentationStatus":"active"},{"sourceId":"osm.node.296949290","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Марьино","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.7431467,55.6500158]},"presentationStatus":"active"},{"sourceId":"osm.node.296953126","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Чеховская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Чешка"},"geometry":{"type":"Point","coordinates":[37.609087,55.7648327]},"presentationStatus":"active"},{"sourceId":"osm.node.296953128","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Боровицкая","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.607057,55.7509718]},"presentationStatus":"active"},{"sourceId":"osm.node.296953130","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Серпуховская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6248289,55.7279529]},"presentationStatus":"active"},{"sourceId":"osm.node.296953131","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Тульская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6228172,55.7086649]},"presentationStatus":"active"},{"sourceId":"osm.node.296953132","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Нагатинская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6224144,55.6829727]},"presentationStatus":"active"},{"sourceId":"osm.node.296953133","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Нагорная","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6102741,55.6719433]},"presentationStatus":"active"},{"sourceId":"osm.node.296953134","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Нахимовский проспект","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.6056223,55.6626511]},"presentationStatus":"active"},{"sourceId":"osm.node.296953135","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Севастопольская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"limited"},"geometry":{"type":"Point","coordinates":[37.598434,55.6526736]},"presentationStatus":"active"},{"sourceId":"osm.node.296953136","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Чертановская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.60669,55.640455]},"presentationStatus":"active"},{"sourceId":"osm.node.296953137","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Южная","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6092188,55.622256]},"presentationStatus":"active"},{"sourceId":"osm.node.296953138","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Пражская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6045238,55.6123741]},"presentationStatus":"active"},{"sourceId":"osm.node.296953139","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Улица Академика Янгеля","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6004358,55.5949862]},"presentationStatus":"active"},{"sourceId":"osm.node.296953140","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Аннино","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.5965311,55.5825315]},"presentationStatus":"active"},{"sourceId":"osm.node.296956167","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Тимирязевская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Тимирязевка"},"geometry":{"type":"Point","coordinates":[37.5763885,55.8171256]},"presentationStatus":"active"},{"sourceId":"osm.node.296956168","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Дмитровская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Дмитровка"},"geometry":{"type":"Point","coordinates":[37.5819074,55.8065606]},"presentationStatus":"active"},{"sourceId":"osm.node.296956169","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Савёловская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Савёла"},"geometry":{"type":"Point","coordinates":[37.5888159,55.7924879]},"presentationStatus":"active"},{"sourceId":"osm.node.296956170","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Менделеевская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Менделеевка","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.601981,55.7809613]},"presentationStatus":"active"},{"sourceId":"osm.node.296957238","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Алтуфьево","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.5873584,55.8979224]},"presentationStatus":"active"},{"sourceId":"osm.node.296957239","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Бибирево","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6035539,55.8838707]},"presentationStatus":"active"},{"sourceId":"osm.node.296957241","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Отрадное","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6046508,55.8631775]},"presentationStatus":"active"},{"sourceId":"osm.node.296959502","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Планерная","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Планерка;Плашка","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.4365264,55.8606544]},"presentationStatus":"active"},{"sourceId":"osm.node.296959504","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Тушинская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.4369761,55.8265293]},"presentationStatus":"active"},{"sourceId":"osm.node.296959505","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Щукинская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Щука"},"geometry":{"type":"Point","coordinates":[37.4647008,55.8084608]},"presentationStatus":"active"},{"sourceId":"osm.node.296959507","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Полежаевская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.5192899,55.7775087]},"presentationStatus":"active"},{"sourceId":"osm.node.296959508","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Беговая","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.5466565,55.7737161]},"presentationStatus":"active"},{"sourceId":"osm.node.296959509","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Улица 1905 года","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"905;905 года;Улица 905 года"},"geometry":{"type":"Point","coordinates":[37.5613413,55.7648611]},"presentationStatus":"active"},{"sourceId":"osm.node.296959510","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Баррикадная","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.5793093,55.7611309]},"presentationStatus":"active"},{"sourceId":"osm.node.297148038","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Комсомольская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6544905,55.7745807]},"presentationStatus":"active"},{"sourceId":"osm.node.297291268","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Владыкино","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.5899119,55.8471808]},"presentationStatus":"active"},{"sourceId":"osm.node.297335182","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Воробьёвы горы","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.559289,55.7103322]},"presentationStatus":"active"},{"sourceId":"osm.node.297366493","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Новослободская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6034748,55.7798525]},"presentationStatus":"active"},{"sourceId":"osm.node.297773322","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Крестьянская Застава","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6674776,55.7331695]},"presentationStatus":"active"},{"sourceId":"osm.node.300120212","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Красногвардейская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.7444351,55.613694]},"presentationStatus":"active"},{"sourceId":"osm.node.300237458","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Рублёво","category":"railway_station"},"geometry":{"type":"Point","coordinates":[37.3414659,55.7747632]},"presentationStatus":"active"},{"sourceId":"osm.node.305486163","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Домодедовская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.7187413,55.6108547]},"presentationStatus":"active"},{"sourceId":"osm.node.3058911918","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Ростокино","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.6668443,55.839644]},"presentationStatus":"active"},{"sourceId":"osm.node.305931885","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Зеленоградская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000670"},"geometry":{"type":"Point","coordinates":[37.9010149,56.0947066]},"presentationStatus":"active"},{"sourceId":"osm.node.308993125","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Орехово","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6949724,55.6131433]},"presentationStatus":"active"},{"sourceId":"osm.node.308993196","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Царицыно","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.669238,55.6214814]},"presentationStatus":"active"},{"sourceId":"osm.node.308993566","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Кантемировская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6565408,55.6357353]},"presentationStatus":"active"},{"sourceId":"osm.node.309741697","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Бульвар Дмитрия Донского","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.5768693,55.5692452]},"presentationStatus":"active"},{"sourceId":"osm.node.309741829","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Улица Старокачаловская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.5766521,55.5689553]},"presentationStatus":"active"},{"sourceId":"osm.node.309744779","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Краснопресненская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.577329,55.761185]},"presentationStatus":"active"},{"sourceId":"osm.node.309745114","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Киевская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Кивуха","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.565506,55.7447266]},"presentationStatus":"active"},{"sourceId":"osm.node.309748905","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Октябрьское Поле","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.4938123,55.7933663]},"presentationStatus":"active"},{"sourceId":"osm.node.309750154","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Сходненская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Сходня","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.4397738,55.8504805]},"presentationStatus":"active"},{"sourceId":"osm.node.309752486","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Юго-Западная","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.4832189,55.6636469]},"presentationStatus":"active"},{"sourceId":"osm.node.309752494","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Университет","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.5332847,55.6926632]},"presentationStatus":"active"},{"sourceId":"osm.node.310099836","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Перерва","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001365"},"geometry":{"type":"Point","coordinates":[37.7162612,55.6608445]},"presentationStatus":"active"},{"sourceId":"osm.node.310100031","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Люблино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001220"},"geometry":{"type":"Point","coordinates":[37.7339138,55.6849688]},"presentationStatus":"active"},{"sourceId":"osm.node.311605855","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Бирюлёво-Товарная","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001095","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.6539345,55.5927752]},"presentationStatus":"active"},{"sourceId":"osm.node.311717434","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Бойня","category":"railway_station","operator":"ОАО «РЖД»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6934157,55.7259229]},"presentationStatus":"active"},{"sourceId":"osm.node.312816773","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Полянка","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6171996,55.7381678]},"presentationStatus":"active"},{"sourceId":"osm.node.3129212862","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Москва-Южный Порт","category":"railway_station","operator":"ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.7143067,55.7051063]},"presentationStatus":"active"},{"sourceId":"osm.node.31447925","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Сетунь","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000275","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.3968256,55.7235596]},"presentationStatus":"active"},{"sourceId":"osm.node.31447943","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Кунцевская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001140","wheelchair":"limited"},"geometry":{"type":"Point","coordinates":[37.4495857,55.7268977]},"presentationStatus":"active"},{"sourceId":"osm.node.31448085","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Немчиновка","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2002910","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.3752603,55.7159368]},"presentationStatus":"active"},{"sourceId":"osm.node.314679443","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Каховская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5984294,55.6529025]},"presentationStatus":"active"},{"sourceId":"osm.node.316075784","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Москва-3","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000355"},"geometry":{"type":"Point","coordinates":[37.6515134,55.8017037]},"presentationStatus":"active"},{"sourceId":"osm.node.316082112","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Маленковская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001345"},"geometry":{"type":"Point","coordinates":[37.6629747,55.8143456]},"presentationStatus":"active"},{"sourceId":"osm.node.316082114","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Яуза","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000575"},"geometry":{"type":"Point","coordinates":[37.6712045,55.8287795]},"presentationStatus":"active"},{"sourceId":"osm.node.3160952315","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Чертаново","category":"railway_station","operator":"ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.6320777,55.6239532]},"presentationStatus":"active"},{"sourceId":"osm.node.316103455","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Фрязино-Товарная","category":"railway_station","operator":"ОАО «РЖД»","official_name":"Фрязино","uic_ref":"2001935"},"geometry":{"type":"Point","coordinates":[38.0304026,55.9634191]},"presentationStatus":"active"},{"sourceId":"osm.node.316109463","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Мытищи","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000015"},"geometry":{"type":"Point","coordinates":[37.7617421,55.9148226]},"presentationStatus":"active"},{"sourceId":"osm.node.316172721","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Алабушево","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2005280"},"geometry":{"type":"Point","coordinates":[37.1406636,56.0080842]},"presentationStatus":"active"},{"sourceId":"osm.node.316486724","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Болшево","category":"railway_station","operator":"ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.8575463,55.9306288]},"presentationStatus":"active"},{"sourceId":"osm.node.316697751","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Рижская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000605","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6406432,55.7925798]},"presentationStatus":"active"},{"sourceId":"osm.node.316850875","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Мещерская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000690"},"geometry":{"type":"Point","coordinates":[37.4246099,55.666803]},"presentationStatus":"active"},{"sourceId":"osm.node.316978213","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Подлипки-Дачные","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000025","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.8164469,55.9254758]},"presentationStatus":"active"},{"sourceId":"osm.node.316978214","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Болшево","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2002080"},"geometry":{"type":"Point","coordinates":[37.8612364,55.9261494]},"presentationStatus":"active"},{"sourceId":"osm.node.316982589","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Валентиновка","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000012"},"geometry":{"type":"Point","coordinates":[37.8918596,55.9249302]},"presentationStatus":"active"},{"sourceId":"osm.node.316982591","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Загорянская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000635"},"geometry":{"type":"Point","coordinates":[37.9160656,55.9264785]},"presentationStatus":"active"},{"sourceId":"osm.node.316982596","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Соколовская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001880"},"geometry":{"type":"Point","coordinates":[37.9461788,55.9271205]},"presentationStatus":"active"},{"sourceId":"osm.node.316982602","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Воронок","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000195"},"geometry":{"type":"Point","coordinates":[37.9739568,55.9191388]},"presentationStatus":"active"},{"sourceId":"osm.node.321410218","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Левобережная","category":"railway_station","operator":"ОАО «РЖД»","official_name":"Левобережье","uic_ref":"2005275","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.4688799,55.887022]},"presentationStatus":"active"},{"sourceId":"osm.node.321554229","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Поварово I","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2004432"},"geometry":{"type":"Point","coordinates":[37.0594021,56.0789938]},"presentationStatus":"active"},{"sourceId":"osm.node.321662941","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Ивантеевка","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001008"},"geometry":{"type":"Point","coordinates":[37.9392342,55.9648192]},"presentationStatus":"active"},{"sourceId":"osm.node.322044140","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"43 км","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001302"},"geometry":{"type":"Point","coordinates":[37.9180285,56.1172541]},"presentationStatus":"active"},{"sourceId":"osm.node.3224593379","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Тропарёво","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.4725258,55.645857]},"presentationStatus":"active"},{"sourceId":"osm.node.3226428878","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Деловой центр","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5391788,55.7491138]},"presentationStatus":"active"},{"sourceId":"osm.node.325092139","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"33 км","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000107"},"geometry":{"type":"Point","coordinates":[38.1528697,55.7443178]},"presentationStatus":"active"},{"sourceId":"osm.node.327377369","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Софрино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000655"},"geometry":{"type":"Point","coordinates":[37.9305753,56.1365062]},"presentationStatus":"active"},{"sourceId":"osm.node.327377375","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Ашукинская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001850"},"geometry":{"type":"Point","coordinates":[37.9468354,56.1613025]},"presentationStatus":"active"},{"sourceId":"osm.node.333159878","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Братиславская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.7506688,55.659739]},"presentationStatus":"active"},{"sourceId":"osm.node.333556214","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"43 км","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001006"},"geometry":{"type":"Point","coordinates":[38.2910194,55.7221842]},"presentationStatus":"active"},{"sourceId":"osm.node.333556222","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Заря","category":"railway_station","operator":"ОАО «РЖД»","official_name":"30 км","uic_ref":"2002000"},"geometry":{"type":"Point","coordinates":[38.086317,55.75363]},"presentationStatus":"active"},{"sourceId":"osm.node.333556299","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"52 км","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001218"},"geometry":{"type":"Point","coordinates":[38.3510157,55.6280233]},"presentationStatus":"active"},{"sourceId":"osm.node.333556302","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"49 км","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001184"},"geometry":{"type":"Point","coordinates":[38.3135396,55.6287852]},"presentationStatus":"active"},{"sourceId":"osm.node.333556306","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"41 км","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000333"},"geometry":{"type":"Point","coordinates":[38.2011876,55.6370373]},"presentationStatus":"active"},{"sourceId":"osm.node.335670071","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"50 км","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001824"},"geometry":{"type":"Point","coordinates":[36.9685493,55.8963427]},"presentationStatus":"active"},{"sourceId":"osm.node.349930322","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Проспект Вернадского","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.5060642,55.6772263]},"presentationStatus":"active"},{"sourceId":"osm.node.3608481074","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Заводская","category":"railway_station","operator":"Лыткаринское ППЖТ"},"geometry":{"type":"Point","coordinates":[37.9176148,55.587398]},"presentationStatus":"active"},{"sourceId":"osm.node.3608481075","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Разъезд 2 километр","category":"railway_station","operator":"Лыткаринское ППЖТ"},"geometry":{"type":"Point","coordinates":[37.8908294,55.6575606]},"presentationStatus":"active"},{"sourceId":"osm.node.3609204449","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Андроновка","category":"railway_station","operator":"ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.7330367,55.7411038]},"presentationStatus":"active"},{"sourceId":"osm.node.362156015","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Пушкинская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Пушка"},"geometry":{"type":"Point","coordinates":[37.6074165,55.7654281]},"presentationStatus":"active"},{"sourceId":"osm.node.3625226778","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Мальчики","category":"railway_station","operator":"ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.9028611,55.6738379]},"presentationStatus":"active"},{"sourceId":"osm.node.367134385","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Школьная","category":"railway_station"},"geometry":{"type":"Point","coordinates":[38.142051,55.5865453]},"presentationStatus":"active"},{"sourceId":"osm.node.367160704","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Детская","category":"railway_station"},"geometry":{"type":"Point","coordinates":[38.143522,55.5967329]},"presentationStatus":"active"},{"sourceId":"osm.node.367161315","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Юность","category":"railway_station"},"geometry":{"type":"Point","coordinates":[38.1371738,55.6006963]},"presentationStatus":"active"},{"sourceId":"osm.node.3706464707","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Котельники","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.8585133,55.6742176]},"presentationStatus":"active"},{"sourceId":"osm.node.3750101608","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Алабино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001063"},"geometry":{"type":"Point","coordinates":[36.9913155,55.5286039]},"presentationStatus":"active"},{"sourceId":"osm.node.375896139","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Кунцево II","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2003950"},"geometry":{"type":"Point","coordinates":[37.3924879,55.7297909]},"presentationStatus":"active"},{"sourceId":"osm.node.3943961770","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Румянцево","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.4415854,55.6329538]},"presentationStatus":"active"},{"sourceId":"osm.node.3993251044","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Тульская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001763"},"geometry":{"type":"Point","coordinates":[37.6238334,55.7045344]},"presentationStatus":"active"},{"sourceId":"osm.node.3997380544","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Дмитровская","category":"railway_station","operator":"ОАО «РЖД»","local_name":"Дмитровка","uic_ref":"2000235"},"geometry":{"type":"Point","coordinates":[37.5782451,55.8079363]},"presentationStatus":"active"},{"sourceId":"osm.node.4006225428","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Саларьево","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.4241868,55.621922]},"presentationStatus":"active"},{"sourceId":"osm.node.420464927","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Толстопальцево","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000036","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.1858211,55.6076093]},"presentationStatus":"active"},{"sourceId":"osm.node.434499692","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Москва-Товарная","category":"railway_station","operator":"ОАО «РЖД»","official_name":"Москва-Товарная-Курская","uic_ref":"2001250","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6893076,55.745199]},"presentationStatus":"active"},{"sourceId":"osm.node.4366001254","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Медведково","category":"railway_station"},"geometry":{"type":"Point","coordinates":[37.6121431,55.8800253]},"presentationStatus":"active"},{"sourceId":"osm.node.4375793533","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Шоссе Энтузиастов","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.7460379,55.7589041]},"presentationStatus":"active"},{"sourceId":"osm.node.4379061166","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Автозаводская","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.6631393,55.7063123]},"presentationStatus":"active"},{"sourceId":"osm.node.4379061167","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Андроновка","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.7377294,55.7470515]},"presentationStatus":"active"},{"sourceId":"osm.node.4379061169","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Ботанический сад","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.6396733,55.8455497]},"presentationStatus":"active"},{"sourceId":"osm.node.4379061170","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Верхние Котлы","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.6188659,55.6901311]},"presentationStatus":"active"},{"sourceId":"osm.node.4379061171","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Владыкино","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5926865,55.8473279]},"presentationStatus":"active"},{"sourceId":"osm.node.4379061172","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Москва-Сити","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5318626,55.7477043]},"presentationStatus":"active"},{"sourceId":"osm.node.4379061173","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Зорге","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5043625,55.7884942]},"presentationStatus":"active"},{"sourceId":"osm.node.4379061174","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Измайлово","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.743213,55.7897913]},"presentationStatus":"active"},{"sourceId":"osm.node.4379061176","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Коптево","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5201074,55.8396193]},"presentationStatus":"active"},{"sourceId":"osm.node.4379061177","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Крымская","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.6057607,55.6898387]},"presentationStatus":"active"},{"sourceId":"osm.node.4379061178","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Кутузовская","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5340531,55.7399173]},"presentationStatus":"active"},{"sourceId":"osm.node.4379061179","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Лихоборы","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5514638,55.8471565]},"presentationStatus":"active"},{"sourceId":"osm.node.4379061181","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Лужники","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5613109,55.7206173]},"presentationStatus":"active"},{"sourceId":"osm.node.4379061183","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Окружная","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5711327,55.8489281]},"presentationStatus":"active"},{"sourceId":"osm.node.4379061184","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Панфиловская","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4990272,55.7990098]},"presentationStatus":"active"},{"sourceId":"osm.node.4379061185","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Площадь Гагарина","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.586394,55.7069666]},"presentationStatus":"active"},{"sourceId":"osm.node.4379061187","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Соколиная Гора","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.7450661,55.7713304]},"presentationStatus":"active"},{"sourceId":"osm.node.4379061188","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Стрешнево","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4869799,55.8137004]},"presentationStatus":"active"},{"sourceId":"osm.node.4379061589","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Угрешская","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.6977066,55.7184497]},"presentationStatus":"active"},{"sourceId":"osm.node.4379061590","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Шелепиха","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.525668,55.7573064]},"presentationStatus":"active"},{"sourceId":"osm.node.4397879996","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Белокаменная","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.7024844,55.8293089]},"presentationStatus":"active"},{"sourceId":"osm.node.4404057364","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Фонвизинская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.5876371,55.822916]},"presentationStatus":"active"},{"sourceId":"osm.node.4409542907","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Балтийская","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4964047,55.825887]},"presentationStatus":"active"},{"sourceId":"osm.node.4418228583","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Ростокино","category":"railway_station","operator":"ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.6569202,55.8427156]},"presentationStatus":"active"},{"sourceId":"osm.node.4455082679","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Катуар","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000610"},"geometry":{"type":"Point","coordinates":[37.5043128,56.0909059]},"presentationStatus":"active"},{"sourceId":"osm.node.4455082681","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Луговая","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001885"},"geometry":{"type":"Point","coordinates":[37.4928085,56.0494495]},"presentationStatus":"active"},{"sourceId":"osm.node.4455082684","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Некрасовская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001179"},"geometry":{"type":"Point","coordinates":[37.4960474,56.0746633]},"presentationStatus":"active"},{"sourceId":"osm.node.4455082685","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Трудовая","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000013"},"geometry":{"type":"Point","coordinates":[37.5150771,56.1207935]},"presentationStatus":"active"},{"sourceId":"osm.node.4488251068","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Дубровка","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.6777959,55.7126812]},"presentationStatus":"active"},{"sourceId":"osm.node.4737155708","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Минская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4968443,55.7247884]},"presentationStatus":"active"},{"sourceId":"osm.node.4737155709","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Ломоносовский проспект","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5162362,55.7071424]},"presentationStatus":"active"},{"sourceId":"osm.node.4737155710","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Раменки","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4985423,55.6975607]},"presentationStatus":"active"},{"sourceId":"osm.node.473887668","semanticType":"map.terminal","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Москва-Пассажирская-Ярославская","category":"railway_terminal","operator":"ОАО «РЖД»","official_name":"Москва-Пассажирская-Ярославская","local_name":"Ярославский вокзал","uic_ref":"2000002","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.6567616,55.7784041]},"presentationStatus":"active"},{"sourceId":"osm.node.4739808708","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Бульвар Рокоссовского","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.7373556,55.8170453]},"presentationStatus":"active"},{"sourceId":"osm.node.474554729","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Кутузовская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000865"},"geometry":{"type":"Point","coordinates":[37.5484205,55.4035858]},"presentationStatus":"active"},{"sourceId":"osm.node.479759800","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Перхушково","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000510","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.1834251,55.6612493]},"presentationStatus":"active"},{"sourceId":"osm.node.4804174180","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Донино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001284"},"geometry":{"type":"Point","coordinates":[38.2751739,55.6360579]},"presentationStatus":"active"},{"sourceId":"osm.node.4833096162","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Хорошёво","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.507379,55.7771437]},"presentationStatus":"active"},{"sourceId":"osm.node.4833122335","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Локомотив","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.7460075,55.8041325]},"presentationStatus":"active"},{"sourceId":"osm.node.4833126188","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Нижегородская","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.7281427,55.7321929]},"presentationStatus":"active"},{"sourceId":"osm.node.4833132227","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Новохохловская","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.7168875,55.7241462]},"presentationStatus":"active"},{"sourceId":"osm.node.4833137665","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"ЗИЛ","category":"railway_station","network":"МЦК","operator":"ГУП «Московский метрополитен»;ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.6475538,55.697877]},"presentationStatus":"active"},{"sourceId":"osm.node.4847996860","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Бутырская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6025285,55.8133726]},"presentationStatus":"active"},{"sourceId":"osm.node.489906221","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Булатниково","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001156"},"geometry":{"type":"Point","coordinates":[37.6681803,55.5662501]},"presentationStatus":"active"},{"sourceId":"osm.node.4927798806","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Киевская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.5653751,55.7443009]},"presentationStatus":"active"},{"sourceId":"osm.node.493292529","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Третьяковская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Третьяковка"},"geometry":{"type":"Point","coordinates":[37.6273084,55.7412838]},"presentationStatus":"active"},{"sourceId":"osm.node.504080258","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Мамонтовская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000580"},"geometry":{"type":"Point","coordinates":[37.8285844,55.9938804]},"presentationStatus":"active"},{"sourceId":"osm.node.5174653609","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Каширская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6488095,55.6549932]},"presentationStatus":"active"},{"sourceId":"osm.node.5176248502","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Кунцевская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4460224,55.7306795]},"presentationStatus":"active"},{"sourceId":"osm.node.5176322725","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Китай-город","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6335649,55.7556518]},"presentationStatus":"active"},{"sourceId":"osm.node.5176322726","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Китай-город","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6330592,55.7555863]},"presentationStatus":"active"},{"sourceId":"osm.node.5176445915","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Парк Культуры","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.5942726,55.7354915]},"presentationStatus":"active"},{"sourceId":"osm.node.5202080141","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Петровско-Разумовская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.5748248,55.8346874]},"presentationStatus":"active"},{"sourceId":"osm.node.5202080142","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Петровско-Разумовская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.5744209,55.8349897]},"presentationStatus":"active"},{"sourceId":"osm.node.5202107560","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Спартак","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4357519,55.8183044]},"presentationStatus":"active"},{"sourceId":"osm.node.5202107562","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Алексеевская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6389375,55.8087525]},"presentationStatus":"active"},{"sourceId":"osm.node.5202107564","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Строгино","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4031235,55.8037077]},"presentationStatus":"active"},{"sourceId":"osm.node.5202107566","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Мякинино","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.3852949,55.8252026]},"presentationStatus":"active"},{"sourceId":"osm.node.5202107568","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Волоколамская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.3822424,55.8355134]},"presentationStatus":"active"},{"sourceId":"osm.node.5202107570","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Курская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6584192,55.7580191]},"presentationStatus":"active"},{"sourceId":"osm.node.5202107572","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Чкаловская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6569978,55.7567019]},"presentationStatus":"active"},{"sourceId":"osm.node.5202107574","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"ВДНХ","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6412006,55.8209553]},"presentationStatus":"active"},{"sourceId":"osm.node.5202107576","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Сокол","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.5150534,55.805267]},"presentationStatus":"active"},{"sourceId":"osm.node.5308689093","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Ховрино","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.4808537,55.8781525]},"presentationStatus":"active"},{"sourceId":"osm.node.540212671","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Востряково","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000101","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.8147758,55.382262]},"presentationStatus":"active"},{"sourceId":"osm.node.5436404611","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Хорошёвская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5191367,55.7766946]},"presentationStatus":"active"},{"sourceId":"osm.node.5436412993","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Петровский парк","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5570925,55.7919222]},"presentationStatus":"active"},{"sourceId":"osm.node.5436420781","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"ЦСКА","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5332007,55.786561]},"presentationStatus":"active"},{"sourceId":"osm.node.54626031","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Черкизово","category":"railway_station","operator":"ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.7466848,55.8030155]},"presentationStatus":"active"},{"sourceId":"osm.node.5482245444","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Селигерская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5471803,55.8666119]},"presentationStatus":"active"},{"sourceId":"osm.node.5482407019","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Верхние Лихоборы","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.5613445,55.8561131]},"presentationStatus":"active"},{"sourceId":"osm.node.5482410676","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Окружная","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.5738294,55.8460256]},"presentationStatus":"active"},{"sourceId":"osm.node.5594600030","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Шереметьево 1","category":"railway_station"},"geometry":{"type":"Point","coordinates":[37.4133128,55.9811631]},"presentationStatus":"active"},{"sourceId":"osm.node.5594634993","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Шереметьево 2","category":"railway_station"},"geometry":{"type":"Point","coordinates":[37.4107152,55.9632284]},"presentationStatus":"active"},{"sourceId":"osm.node.5868120884","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Мичуринский проспект","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4828443,55.6893341]},"presentationStatus":"active"},{"sourceId":"osm.node.5868122985","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Озёрная","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4487297,55.6705052]},"presentationStatus":"active"},{"sourceId":"osm.node.5868122986","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Новопеределкино","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.3551039,55.639625]},"presentationStatus":"active"},{"sourceId":"osm.node.5868122987","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Рассказовка","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.3350858,55.6340295]},"presentationStatus":"active"},{"sourceId":"osm.node.5868122988","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Боровское шоссе","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.3704228,55.6477505]},"presentationStatus":"active"},{"sourceId":"osm.node.5868122989","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Солнцево","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.3911002,55.649569]},"presentationStatus":"active"},{"sourceId":"osm.node.5868122990","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Говорово","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.417239,55.6595519]},"presentationStatus":"active"},{"sourceId":"osm.node.5890300571","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Новохохловская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001010","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.7128095,55.7250755]},"presentationStatus":"active"},{"sourceId":"osm.node.596129560","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Митино","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.3622259,55.8457543]},"presentationStatus":"active"},{"sourceId":"osm.node.5988989651","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Нижегородская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001280","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.7298182,55.733367]},"presentationStatus":"active"},{"sourceId":"osm.node.60660466","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Медведково","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.66155,55.8871767]},"presentationStatus":"active"},{"sourceId":"osm.node.60660469","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Бабушкинская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6641097,55.8696342]},"presentationStatus":"active"},{"sourceId":"osm.node.61088523","semanticType":"map.terminal","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Москва-Пассажирская-Курская","category":"railway_terminal","operator":"ОАО «РЖД»","official_name":"Москва-Пассажирская-Курская","local_name":"Курский вокзал","uic_ref":"2000001","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6627881,55.7576777]},"presentationStatus":"active"},{"sourceId":"osm.node.6110332204","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Храпуново","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001845"},"geometry":{"type":"Point","coordinates":[38.3472913,55.7209943]},"presentationStatus":"active"},{"sourceId":"osm.node.6147634222","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Беломорская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4748773,55.8649644]},"presentationStatus":"active"},{"sourceId":"osm.node.6163569388","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Верхние Котлы","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001011","wheelchair":"limited"},"geometry":{"type":"Point","coordinates":[37.6169631,55.6900297]},"presentationStatus":"active"},{"sourceId":"osm.node.6172651201","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Савёловская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Савёла","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.5861196,55.7923287]},"presentationStatus":"active"},{"sourceId":"osm.node.6418259058","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Циолковская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000016"},"geometry":{"type":"Point","coordinates":[38.1033634,55.8702231]},"presentationStatus":"active"},{"sourceId":"osm.node.6418693116","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Аэропорт Внуково","category":"railway_station","official_name":"Терминал-Внуково","uic_ref":"2000714","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.286848,55.6066179]},"presentationStatus":"active"},{"sourceId":"osm.node.6418845805","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Ивантеевка-2","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001346"},"geometry":{"type":"Point","coordinates":[37.9079497,55.9617772]},"presentationStatus":"active"},{"sourceId":"osm.node.6425123924","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Курьяново","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000214","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.70139,55.6498349]},"presentationStatus":"active"},{"sourceId":"osm.node.6447319935","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Колонтаево","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000544"},"geometry":{"type":"Point","coordinates":[38.2737,55.77972]},"presentationStatus":"active"},{"sourceId":"osm.node.6447319936","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Осеевская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001148"},"geometry":{"type":"Point","coordinates":[38.1350812,55.8613736]},"presentationStatus":"active"},{"sourceId":"osm.node.6447562798","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Лесная","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001915"},"geometry":{"type":"Point","coordinates":[38.3634451,55.7544086]},"presentationStatus":"active"},{"sourceId":"osm.node.6452308572","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Солнечная","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000315","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.384817,55.6572454]},"presentationStatus":"active"},{"sourceId":"osm.node.6453276366","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Очаково I","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000215","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4514951,55.6836351]},"presentationStatus":"active"},{"sourceId":"osm.node.6501069903","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Остафьево","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001215"},"geometry":{"type":"Point","coordinates":[37.5549248,55.4855891]},"presentationStatus":"active"},{"sourceId":"osm.node.6516800631","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Сколково","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001101","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.3425389,55.7001205]},"presentationStatus":"active"},{"sourceId":"osm.node.6518539849","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Косино","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.8510317,55.7034168]},"presentationStatus":"active"},{"sourceId":"osm.node.6518539850","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Улица Дмитриевского","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.8802008,55.7101029]},"presentationStatus":"active"},{"sourceId":"osm.node.6518539851","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Лухмановская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.9010164,55.70851]},"presentationStatus":"active"},{"sourceId":"osm.node.6518539852","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Некрасовка","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.9281784,55.7028909]},"presentationStatus":"active"},{"sourceId":"osm.node.6560279948","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Новомосковская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4680062,55.5605675]},"presentationStatus":"active"},{"sourceId":"osm.node.6560279949","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Ольховая","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.4593593,55.568621]},"presentationStatus":"active"},{"sourceId":"osm.node.6560279950","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Прокшино","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.4338591,55.5862179]},"presentationStatus":"active"},{"sourceId":"osm.node.6560279951","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Филатов Луг","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.4074265,55.6015282]},"presentationStatus":"active"},{"sourceId":"osm.node.6564392308","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Санино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001681","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.1381673,55.583979]},"presentationStatus":"active"},{"sourceId":"osm.node.6595236431","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Мичуринец","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001143","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.3155468,55.6461888]},"presentationStatus":"active"},{"sourceId":"osm.node.6605207003","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Чухлинка","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001310","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.7644368,55.7336173]},"presentationStatus":"active"},{"sourceId":"osm.node.6629587605","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Славянский бульвар","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001680","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4722683,55.7303845]},"presentationStatus":"active"},{"sourceId":"osm.node.666528523","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Сретенский бульвар","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6400865,55.7669878]},"presentationStatus":"active"},{"sourceId":"osm.node.676636855","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Монино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001320"},"geometry":{"type":"Point","coordinates":[38.1976948,55.843453]},"presentationStatus":"active"},{"sourceId":"osm.node.68916801","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Партизанская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.7509929,55.788503]},"presentationStatus":"active"},{"sourceId":"osm.node.68937012","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Семёновская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.7212818,55.7833072]},"presentationStatus":"active"},{"sourceId":"osm.node.690549778","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Подмосковная","category":"railway_station","operator":"ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.5269566,55.8145299]},"presentationStatus":"active"},{"sourceId":"osm.node.6938823554","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Красные Ворота","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","local_name":"Красные","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6489874,55.7690244]},"presentationStatus":"active"},{"sourceId":"osm.node.6939665011","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Крылатское","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.4081393,55.7565949]},"presentationStatus":"active"},{"sourceId":"osm.node.696838947","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Щёлково","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001360"},"geometry":{"type":"Point","coordinates":[38.0093451,55.909255]},"presentationStatus":"active"},{"sourceId":"osm.node.6986103158","semanticType":"map.terminal","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Площадь трёх вокзалов","category":"railway_terminal","operator":"ОАО «РЖД»","uic_ref":"2001005","wheelchair":"nyes"},"geometry":{"type":"Point","coordinates":[37.651616,55.7762216]},"presentationStatus":"active"},{"sourceId":"osm.node.7001803288","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Волоколамская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001102","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.3824599,55.8321414]},"presentationStatus":"active"},{"sourceId":"osm.node.7005693730","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Пенягино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001103"},"geometry":{"type":"Point","coordinates":[37.3613943,55.8233865]},"presentationStatus":"active"},{"sourceId":"osm.node.7335380503","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Окская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.7817628,55.718342]},"presentationStatus":"active"},{"sourceId":"osm.node.7335523472","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Стахановская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.7532484,55.7270183]},"presentationStatus":"active"},{"sourceId":"osm.node.7339988431","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Юго-Восточная","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.8189764,55.7050362]},"presentationStatus":"active"},{"sourceId":"osm.node.7340764979","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Лефортово","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.7067382,55.7647338]},"presentationStatus":"active"},{"sourceId":"osm.node.7340764980","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Авиамоторная","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.718992,55.7539271]},"presentationStatus":"active"},{"sourceId":"osm.node.7340764981","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Нижегородская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.7299863,55.7319234]},"presentationStatus":"active"},{"sourceId":"osm.node.7503063463","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Гагаринская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000914"},"geometry":{"type":"Point","coordinates":[38.0361096,55.9063752]},"presentationStatus":"active"},{"sourceId":"osm.node.7503127482","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Чкаловская","category":"railway_station","operator":"АО «ЦППК»","uic_ref":"2001380"},"geometry":{"type":"Point","coordinates":[38.0625173,55.8974342]},"presentationStatus":"active"},{"sourceId":"osm.node.7503496975","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Кашино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001942"},"geometry":{"type":"Point","coordinates":[38.2343845,55.8129033]},"presentationStatus":"active"},{"sourceId":"osm.node.7628601425","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Переделкино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001795","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.3556346,55.6562878]},"presentationStatus":"active"},{"sourceId":"osm.node.773136965","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Марьина Роща","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6163058,55.7955236]},"presentationStatus":"active"},{"sourceId":"osm.node.773136972","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Достоевская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.6150933,55.7815096]},"presentationStatus":"active"},{"sourceId":"osm.node.7880631948","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Зелёный Бор","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001117"},"geometry":{"type":"Point","coordinates":[37.8786755,55.9629458]},"presentationStatus":"active"},{"sourceId":"osm.node.8047546763","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Новогиреево","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001150","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.8183129,55.7443541]},"presentationStatus":"active"},{"sourceId":"osm.node.8154958413","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Ховрино","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2005485","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.487406,55.8791703]},"presentationStatus":"active"},{"sourceId":"osm.node.8204060757","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Аэропорт","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001027"},"geometry":{"type":"Point","coordinates":[37.2660622,55.6099621]},"presentationStatus":"active"},{"sourceId":"osm.node.8204066296","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Лесной Городок","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000730","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.2184084,55.6322536]},"presentationStatus":"active"},{"sourceId":"osm.node.8268702705","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Электрозаводская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.7029935,55.7802845]},"presentationStatus":"active"},{"sourceId":"osm.node.8540724129","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Белокаменная","category":"railway_station","operator":"ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.7000597,55.8302048]},"presentationStatus":"active"},{"sourceId":"osm.node.8551829155","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Москва-Сортировочная-Киевская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001069"},"geometry":{"type":"Point","coordinates":[37.5123234,55.7282829]},"presentationStatus":"active"},{"sourceId":"osm.node.85698866","semanticType":"map.terminal","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Москва-Пассажирская-Казанская","category":"railway_terminal","operator":"ОАО «РЖД»","official_name":"Москва-Пассажирская-Казанская","local_name":"Казанский вокзал","uic_ref":"2000003","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.6598644,55.7742667]},"presentationStatus":"active"},{"sourceId":"osm.node.8581944518","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Народное Ополчение","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4857311,55.7757351]},"presentationStatus":"active"},{"sourceId":"osm.node.8581944519","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Мнёвники","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»"},"geometry":{"type":"Point","coordinates":[37.471405,55.7611845]},"presentationStatus":"active"},{"sourceId":"osm.node.87702782","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Матвеевская","category":"railway_station","operator":"ОАО «РЖД»","official_name":"Матвеевское","uic_ref":"2000105","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4815283,55.7045582]},"presentationStatus":"active"},{"sourceId":"osm.node.8869724091","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Щукинская","category":"railway_station","operator":"ОАО «РЖД»"},"geometry":{"type":"Point","coordinates":[37.4602535,55.8111746]},"presentationStatus":"active"},{"sourceId":"osm.node.892874466","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Пионерская","category":"railway_station"},"geometry":{"type":"Point","coordinates":[38.1571852,55.5885595]},"presentationStatus":"active"},{"sourceId":"osm.node.8992937999","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Аминьевская","category":"railway_station","operator":"ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4696956,55.698016]},"presentationStatus":"active"},{"sourceId":"osm.node.9315693017","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Зюзино","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5735524,55.6557778]},"presentationStatus":"active"},{"sourceId":"osm.node.9315693019","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Воронцовская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5394795,55.6588351]},"presentationStatus":"active"},{"sourceId":"osm.node.9315693022","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Новаторская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5217748,55.6700672]},"presentationStatus":"active"},{"sourceId":"osm.node.9315693025","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Проспект Вернадского","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.503929,55.6784309]},"presentationStatus":"active"},{"sourceId":"osm.node.9315693028","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Мичуринский проспект","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4851908,55.6882968]},"presentationStatus":"active"},{"sourceId":"osm.node.9315693031","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Аминьевская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4649703,55.6971748]},"presentationStatus":"active"},{"sourceId":"osm.node.9315693034","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Давыдково","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4517426,55.7151436]},"presentationStatus":"active"},{"sourceId":"osm.node.9315693037","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Кунцевская","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4459847,55.7288677]},"presentationStatus":"active"},{"sourceId":"osm.node.9315693039","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Терехово","category":"metro","network":"Московский метрополитен","operator":"ГУП «Московский метрополитен»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.4596435,55.748029]},"presentationStatus":"active"},{"sourceId":"osm.node.9635578849","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Минская","category":"railway_station","operator":"ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.5016397,55.7239584]},"presentationStatus":"active"},{"sourceId":"osm.node.9815064397","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Аэропорт Шереметьево. Терминалы B, C","category":"railway_station"},"geometry":{"type":"Point","coordinates":[37.414128,55.9822846]},"presentationStatus":"active"},{"sourceId":"osm.node.9817105700","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Печатники","category":"railway_station","operator":"ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.7322667,55.6927576]},"presentationStatus":"active"},{"sourceId":"osm.node.9819156477","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Ольгино","category":"railway_station","operator":"ОАО «РЖД»","wheelchair":"yes"},"geometry":{"type":"Point","coordinates":[37.9787468,55.7517377]},"presentationStatus":"active"},{"sourceId":"osm.node.98820041","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Пионерская","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2001029"},"geometry":{"type":"Point","coordinates":[37.2119708,55.665265]},"presentationStatus":"active"},{"sourceId":"osm.node.98820051","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Баковка","category":"railway_station","operator":"ОАО «РЖД»","uic_ref":"2000685","wheelchair":"no"},"geometry":{"type":"Point","coordinates":[37.3146501,55.6825897]},"presentationStatus":"active"},{"sourceId":"osm.node.9939274649","semanticType":"map.station","observedAt":"2025-11-23T19:43:15.000Z","receivedAt":"2025-11-23T19:43:15.000Z","attributes":{"name":"Старопролетарская","category":"railway_station"},"geometry":{"type":"Point","coordinates":[37.7506123,55.7184749]},"presentationStatus":"active"}],"metadata":{"factCount":638,"categoryCounts":{"metro":273,"railway_station":357,"railway_terminal":8}}} diff --git a/services/map-gateway/scripts/generate-reference-station-seed.mjs b/services/map-gateway/scripts/generate-reference-station-seed.mjs new file mode 100644 index 0000000..c678913 --- /dev/null +++ b/services/map-gateway/scripts/generate-reference-station-seed.mjs @@ -0,0 +1,110 @@ +#!/usr/bin/env node + +import { createHash } from "node:crypto"; +import { mkdir, readFile, writeFile } from "node:fs/promises"; +import { dirname, resolve } from "node:path"; + +const [inputPath, outputPath] = process.argv.slice(2); +if (!inputPath || !outputPath) { + console.error("usage: generate-reference-station-seed.mjs "); + process.exit(2); +} + +const source = JSON.parse(await readFile(resolve(inputPath), "utf8")); +if (source?.type !== "FeatureCollection" || !Array.isArray(source.features)) { + throw new Error("station_seed_feature_collection_required"); +} + +const generatedAt = isIso(source.timestamp) ? new Date(source.timestamp).toISOString() : new Date(0).toISOString(); +const facts = source.features.map((feature, index) => normalizeFeature(feature, generatedAt, index)); +facts.sort((left, right) => left.sourceId.localeCompare(right.sourceId)); +const contentDigest = createHash("sha256") + .update(JSON.stringify(facts)) + .digest("hex"); +const counts = Object.fromEntries(["metro", "railway_station", "railway_terminal"].map((category) => [ + category, + facts.filter((fact) => fact.attributes.category === category).length, +])); +const document = { + schemaVersion: "nodedc.map-reference-seed/v1", + profileId: "transport-stations.v1", + sourceRevision: `seed-${contentDigest.slice(0, 16)}`, + generatedAt, + contentDigest, + complete: true, + facts, + metadata: { + factCount: facts.length, + categoryCounts: counts, + }, +}; + +await mkdir(dirname(resolve(outputPath)), { recursive: true }); +await writeFile(resolve(outputPath), `${JSON.stringify(document)}\n`, "utf8"); +console.log(JSON.stringify({ output: resolve(outputPath), ...document.metadata, contentDigest })); + +function normalizeFeature(feature, generatedAt, index) { + if (feature?.type !== "Feature" || feature?.geometry?.type !== "Point") { + throw new Error(`station_seed_feature_${index}_invalid`); + } + const coordinates = feature.geometry.coordinates; + if (!Array.isArray(coordinates) || coordinates.length < 2) { + throw new Error(`station_seed_feature_${index}_coordinates_invalid`); + } + const longitude = Number(coordinates[0]); + const latitude = Number(coordinates[1]); + if (!Number.isFinite(longitude) || longitude < -180 || longitude > 180 + || !Number.isFinite(latitude) || latitude < -90 || latitude > 90) { + throw new Error(`station_seed_feature_${index}_coordinates_invalid`); + } + const properties = feature.properties && typeof feature.properties === "object" ? feature.properties : {}; + const category = normalizeCategory(properties.sort); + const nativeId = String(feature.id || properties["@id"] || "").trim(); + const identity = nativeId.match(/^(node|way|relation)\/([1-9]\d*)$/); + if (!identity) throw new Error(`station_seed_feature_${index}_identity_invalid`); + const attributes = compact({ + name: firstString(properties.name, properties["name:ru"], properties.official_name, properties.loc_name), + category, + network: optionalString(properties.network), + operator: optionalString(properties.operator), + official_name: optionalString(properties.official_name), + local_name: optionalString(properties.loc_name), + uic_ref: optionalString(properties.uic_ref), + wheelchair: optionalString(properties.wheelchair), + }); + if (!attributes.name) throw new Error(`station_seed_feature_${index}_name_required`); + return { + sourceId: `osm.${identity[1]}.${identity[2]}`, + semanticType: category === "railway_terminal" ? "map.terminal" : "map.station", + observedAt: generatedAt, + receivedAt: generatedAt, + attributes, + geometry: { type: "Point", coordinates: [longitude, latitude] }, + presentationStatus: "active", + }; +} + +function normalizeCategory(value) { + if (value === "metro") return "metro"; + if (value === "terminal") return "railway_terminal"; + if (value === "rzd_station") return "railway_station"; + throw new Error("station_seed_category_invalid"); +} + +function firstString(...values) { + return values.map(optionalString).find(Boolean); +} + +function optionalString(value) { + if (typeof value !== "string") return undefined; + const normalized = value.trim(); + return normalized && normalized.length <= 256 ? normalized : undefined; +} + +function compact(value) { + return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== undefined)); +} + +function isIso(value) { + return typeof value === "string" && !Number.isNaN(Date.parse(value)); +} diff --git a/services/map-gateway/src/reference-station-source.mjs b/services/map-gateway/src/reference-station-source.mjs new file mode 100644 index 0000000..7554905 --- /dev/null +++ b/services/map-gateway/src/reference-station-source.mjs @@ -0,0 +1,648 @@ +import { createHash } from "node:crypto"; +import { mkdir, readFile, readdir, rename, writeFile } from "node:fs/promises"; +import { join, resolve, sep } from "node:path"; + +export const MAP_REFERENCE_SEED_SCHEMA = "nodedc.map-reference-seed/v1"; +export const MAP_REFERENCE_SNAPSHOT_SCHEMA = "nodedc.map-reference.snapshot/v1"; +export const MAP_REFERENCE_SEARCH_SCHEMA = "nodedc.map-reference.search/v1"; +export const TRANSPORT_STATION_PROFILE_ID = "transport-stations.v1"; + +const FACT_ID = /^osm\.(node|way|relation)\.([1-9]\d*)$/; +const CATEGORIES = new Set(["metro", "railway_station", "railway_terminal"]); +const SEMANTIC_TYPES = new Set(["map.station", "map.terminal"]); +const MAX_FACTS = 100_000; +const MAX_CELLS_PER_REQUEST = 64; +const MAX_CELL_BYTES = 8 * 1024 * 1024; +const MAX_CONCURRENT_UPSTREAM_FETCHES = 2; +const MIN_UPSTREAM_START_INTERVAL_MS = 750; +const MAX_SEARCH_RESULTS = 32; +const SEARCH_CACHE_TTL_MS = 5 * 60 * 1000; + +export async function createReferenceStationSource({ + seedFile, + cacheDir, + fetchEnabled = true, + overpassApiBase = "https://overpass-api.de/api/interpreter", + cellDegrees = 0.25, + timeoutMs = 30_000, + fetchImpl = fetch, +}) { + const seed = validateSeed(JSON.parse(await readFile(resolve(seedFile), "utf8"))); + const cellRoot = resolve(cacheDir, "reference-features", TRANSPORT_STATION_PROFILE_ID); + const searchIndexFile = resolve(cacheDir, "reference-features", `${TRANSPORT_STATION_PROFILE_ID}.search.json`); + await mkdir(cellRoot, { recursive: true, mode: 0o750 }); + const endpoint = normalizeOverpassEndpoint(overpassApiBase); + const normalizedCellDegrees = finite(cellDegrees, 0.05, 5, "reference_station_cell_degrees_invalid"); + const seedCoverage = factCoverage(seed.facts, normalizedCellDegrees); + const normalizedTimeoutMs = finite(timeoutMs, 1_000, 120_000, "reference_station_timeout_invalid"); + const inflightCells = new Map(); + const inflightSearches = new Map(); + const recentSearches = new Map(); + const indexedFacts = new Map(seed.facts.map((fact) => [fact.sourceId, fact])); + for (const fact of await readSearchIndex(searchIndexFile)) indexedFacts.set(fact.sourceId, fact); + const pendingFetches = []; + let activeFetches = 0; + let upstreamRequests = 0; + let upstreamFailures = 0; + let lastRefreshAt = null; + let lastFailure = null; + let lastFailureAt = null; + let searchRequests = 0; + let searchFailures = 0; + let upstreamStartQueue = Promise.resolve(); + let nextUpstreamStartAt = 0; + + async function snapshot({ bbox } = {}) { + const normalizedBbox = bbox ? normalizeBbox(bbox) : null; + let cachedFacts = []; + let requestedCells = []; + let complete = true; + if (normalizedBbox) { + requestedCells = cellsForBbox(normalizedBbox, normalizedCellDegrees); + if (requestedCells.length > MAX_CELLS_PER_REQUEST) { + requestedCells = []; + complete = false; + } else { + const results = await Promise.all(requestedCells.map(async (cell) => { + if (cellInsideCoverage(cell, seedCoverage)) return { facts: [] }; + const cached = await readCell(cellRoot, cell.key); + if (cached) { + indexFacts(cached.facts); + return cached; + } + if (!fetchEnabled) return null; + return enqueueFetch(cell); + })); + cachedFacts = results.flatMap((result) => result?.facts ?? []); + if (results.some((result) => !result)) complete = false; + } + } + const seedFacts = normalizedBbox ? seed.facts.filter((fact) => factInside(fact, normalizedBbox)) : seed.facts; + const facts = deduplicateFacts([...seedFacts, ...cachedFacts]) + .filter((fact) => !normalizedBbox || factInside(fact, normalizedBbox)); + const generatedAt = new Date().toISOString(); + const contentDigest = sha256(JSON.stringify(facts)); + const categoryCounts = Object.fromEntries([...CATEGORIES].map((category) => [ + category, + facts.filter((fact) => fact.attributes.category === category).length, + ])); + return { + schemaVersion: MAP_REFERENCE_SNAPSHOT_SCHEMA, + profileId: TRANSPORT_STATION_PROFILE_ID, + sourceRevision: contentDigest, + generatedAt, + complete, + contentDigest, + facts, + metadata: { + factCount: facts.length, + categoryCounts, + requestedCellCount: requestedCells.length, + seedRevision: seed.sourceRevision, + }, + }; + } + + async function search({ query, limit = 12 } = {}) { + const displayQuery = normalizeDisplaySearchQuery(query); + const normalizedQuery = normalizeSearchQuery(displayQuery); + const normalizedLimit = Math.max(1, Math.min(MAX_SEARCH_RESULTS, Number(limit) || 12)); + const localFacts = searchIndexedFacts(indexedFacts.values(), normalizedQuery, normalizedLimit); + let upstreamFacts = []; + let complete = !fetchEnabled; + if (fetchEnabled && normalizedQuery.length >= 3) { + const cachedSearch = recentSearches.get(normalizedQuery); + if (cachedSearch && Date.now() - cachedSearch.storedAt < SEARCH_CACHE_TTL_MS) { + upstreamFacts = cachedSearch.facts; + complete = true; + } else { + const inflight = inflightSearches.get(normalizedQuery); + const task = inflight ?? scheduleFetch(async () => { + searchRequests += 1; + upstreamRequests += 1; + try { + const facts = await fetchSearch(endpoint, displayQuery, normalizedLimit, normalizedTimeoutMs, fetchImpl); + indexFacts(facts); + await writeSearchIndex(searchIndexFile, [...indexedFacts.values()]); + recentSearches.set(normalizedQuery, { storedAt: Date.now(), facts }); + lastRefreshAt = new Date().toISOString(); + return { facts, complete: true }; + } catch (error) { + searchFailures += 1; + upstreamFailures += 1; + lastFailure = safeUpstreamFailure(error); + lastFailureAt = new Date().toISOString(); + return { facts: [], complete: false }; + } + }); + if (!inflight) { + inflightSearches.set(normalizedQuery, task); + void task.finally(() => inflightSearches.delete(normalizedQuery)); + } + const result = await task; + upstreamFacts = result.facts; + complete = result.complete; + } + } + const facts = searchIndexedFacts( + deduplicateFacts([...localFacts, ...upstreamFacts]), + normalizedQuery, + normalizedLimit, + ); + const generatedAt = new Date().toISOString(); + const contentDigest = sha256(JSON.stringify(facts)); + return { + schemaVersion: MAP_REFERENCE_SEARCH_SCHEMA, + profileId: TRANSPORT_STATION_PROFILE_ID, + sourceRevision: contentDigest, + generatedAt, + complete, + query: displayQuery, + contentDigest, + facts, + metadata: { + factCount: facts.length, + localMatchCount: localFacts.length, + }, + }; + } + + function indexFacts(facts) { + for (const fact of facts) indexedFacts.set(fact.sourceId, fact); + } + + function enqueueFetch(cell) { + const inflight = inflightCells.get(cell.key); + if (inflight) return inflight; + const task = scheduleFetch(async () => { + upstreamRequests += 1; + try { + const document = await fetchCell(endpoint, cell, normalizedTimeoutMs, fetchImpl); + await writeCell(cellRoot, cell.key, document); + lastRefreshAt = document.generatedAt; + return document; + } catch (error) { + upstreamFailures += 1; + lastFailure = safeUpstreamFailure(error); + lastFailureAt = new Date().toISOString(); + return null; + } + }); + inflightCells.set(cell.key, task); + void task.finally(() => inflightCells.delete(cell.key)); + return task; + } + + function scheduleFetch(run) { + return new Promise((resolveTask) => { + pendingFetches.push({ run, resolveTask }); + pumpFetchQueue(); + }); + } + + function pumpFetchQueue() { + while (activeFetches < MAX_CONCURRENT_UPSTREAM_FETCHES && pendingFetches.length) { + const next = pendingFetches.shift(); + activeFetches += 1; + void Promise.resolve() + .then(waitForUpstreamStart) + .then(next.run) + .then(next.resolveTask) + .finally(() => { + activeFetches -= 1; + pumpFetchQueue(); + }); + } + } + + function waitForUpstreamStart() { + const turn = upstreamStartQueue.then(async () => { + const waitMs = Math.max(0, nextUpstreamStartAt - Date.now()); + if (waitMs) await new Promise((resolveDelay) => setTimeout(resolveDelay, waitMs)); + nextUpstreamStartAt = Date.now() + MIN_UPSTREAM_START_INTERVAL_MS; + }); + upstreamStartQueue = turn.catch(() => undefined); + return turn; + } + + async function status() { + let cachedCellCount = 0; + try { + cachedCellCount = (await readdir(cellRoot)).filter((name) => name.endsWith(".json")).length; + } catch { + cachedCellCount = 0; + } + return { + profileId: TRANSPORT_STATION_PROFILE_ID, + seedRevision: seed.sourceRevision, + seedFactCount: seed.facts.length, + fetchEnabled, + cellDegrees: normalizedCellDegrees, + cachedCellCount, + upstreamRequests, + upstreamFailures, + searchRequests, + searchFailures, + upstreamState: upstreamFailures > 0 && (!lastRefreshAt || Date.parse(lastFailureAt) > Date.parse(lastRefreshAt)) + ? "degraded" + : (lastRefreshAt ? "ready" : "idle"), + activeFetches, + queuedFetches: pendingFetches.length, + lastRefreshAt, + lastFailure, + lastFailureAt, + }; + } + + return Object.freeze({ search, snapshot, status }); +} + +function validateSeed(value) { + if (!isObject(value) || value.schemaVersion !== MAP_REFERENCE_SEED_SCHEMA + || value.profileId !== TRANSPORT_STATION_PROFILE_ID || !Array.isArray(value.facts) + || !value.facts.length || value.facts.length > MAX_FACTS) { + throw sourceError("reference_station_seed_invalid"); + } + const facts = value.facts.map(validateFact); + if (sha256(JSON.stringify(facts)) !== value.contentDigest) { + throw sourceError("reference_station_seed_digest_mismatch"); + } + return Object.freeze({ ...value, facts: Object.freeze(facts) }); +} + +function validateFact(value) { + if (!isObject(value) || !FACT_ID.test(String(value.sourceId || "")) + || !SEMANTIC_TYPES.has(value.semanticType) || !isIso(value.observedAt) + || !isIso(value.receivedAt) || value.presentationStatus !== "active" + || !isObject(value.attributes) || !CATEGORIES.has(value.attributes.category)) { + throw sourceError("reference_station_fact_invalid"); + } + const coordinates = value.geometry?.type === "Point" ? value.geometry.coordinates : null; + if (!Array.isArray(coordinates) || coordinates.length !== 2 + || !Number.isFinite(coordinates[0]) || coordinates[0] < -180 || coordinates[0] > 180 + || !Number.isFinite(coordinates[1]) || coordinates[1] < -90 || coordinates[1] > 90) { + throw sourceError("reference_station_geometry_invalid"); + } + const allowedAttributes = new Set(["name", "category", "network", "operator", "official_name", "local_name", "uic_ref", "wheelchair"]); + if (Object.keys(value.attributes).some((key) => !allowedAttributes.has(key))) { + throw sourceError("reference_station_attribute_not_allowed"); + } + if (value.semanticType === "map.terminal" !== (value.attributes.category === "railway_terminal")) { + throw sourceError("reference_station_semantic_type_mismatch"); + } + return Object.freeze(structuredClone(value)); +} + +async function fetchCell(endpoint, cell, timeoutMs, fetchImpl) { + const controller = new AbortController(); + const timeout = setTimeout(() => controller.abort(), timeoutMs); + try { + const query = `[out:json][timeout:25];(nwr["railway"="station"](${cell.south},${cell.west},${cell.north},${cell.east});nwr["railway"="halt"](${cell.south},${cell.west},${cell.north},${cell.east}););out center tags;`; + const response = await fetchImpl(endpoint, { + method: "POST", + headers: { + "content-type": "application/x-www-form-urlencoded;charset=UTF-8", + "user-agent": "NODE.DC-Map-Gateway/1.0 (+https://node-dc.ru)", + }, + body: new URLSearchParams({ data: query }).toString(), + signal: controller.signal, + redirect: "error", + }); + if (!response.ok) throw sourceError(`reference_station_upstream_http_${response.status}`); + const raw = await response.text(); + if (Buffer.byteLength(raw) > MAX_CELL_BYTES) throw sourceError("reference_station_upstream_bytes_exceeded"); + const payload = JSON.parse(raw); + if (!Array.isArray(payload?.elements)) throw sourceError("reference_station_upstream_invalid"); + const observedAt = new Date().toISOString(); + const facts = payload.elements.flatMap((element) => { + try { + return [normalizeOverpassElement(element, observedAt)]; + } catch { + return []; + } + }); + return { + schemaVersion: "nodedc.map-reference-cell/v1", + key: cell.key, + generatedAt: observedAt, + facts: deduplicateFacts(facts), + }; + } finally { + clearTimeout(timeout); + } +} + +async function fetchSearch(endpoint, query, limit, timeoutMs, fetchImpl) { + const controller = new AbortController(); + const timeout = setTimeout(() => controller.abort(), timeoutMs); + try { + const expression = escapeOverpassString(query); + const resultLimit = Math.max(limit, Math.min(96, limit * 3)); + // Exact OSM name keys are globally indexed by Overpass. Filtering the + // whole planet by railway first is several orders of magnitude slower and + // routinely times out; station semantics are therefore verified locally + // by the same fail-closed normalizer used by viewport cells. + const overpassQuery = `[out:json][timeout:25];(nwr["name"="${expression}"];nwr["name:ru"="${expression}"];);out center tags ${resultLimit};`; + const response = await fetchImpl(endpoint, { + method: "POST", + headers: { + "content-type": "application/x-www-form-urlencoded;charset=UTF-8", + "user-agent": "NODE.DC-Map-Gateway/1.0 (+https://node-dc.ru)", + }, + body: new URLSearchParams({ data: overpassQuery }).toString(), + signal: controller.signal, + redirect: "error", + }); + if (!response.ok) throw sourceError(`reference_station_upstream_http_${response.status}`); + const raw = await response.text(); + if (Buffer.byteLength(raw) > MAX_CELL_BYTES) throw sourceError("reference_station_upstream_bytes_exceeded"); + const payload = JSON.parse(raw); + if (!Array.isArray(payload?.elements)) throw sourceError("reference_station_upstream_invalid"); + const observedAt = new Date().toISOString(); + return deduplicateFacts(payload.elements.flatMap((element) => { + try { + return [normalizeOverpassElement(element, observedAt)]; + } catch { + return []; + } + })); + } finally { + clearTimeout(timeout); + } +} + +function normalizeOverpassElement(value, observedAt) { + if (!isObject(value) || !new Set(["node", "way", "relation"]).has(value.type) + || !Number.isSafeInteger(value.id) || value.id <= 0 || !isObject(value.tags)) { + throw sourceError("reference_station_upstream_element_invalid"); + } + if (!new Set(["station", "halt"]).has(value.tags.railway)) { + throw sourceError("reference_station_upstream_not_station"); + } + const longitude = Number(value.lon ?? value.center?.lon); + const latitude = Number(value.lat ?? value.center?.lat); + if (!Number.isFinite(longitude) || longitude < -180 || longitude > 180 + || !Number.isFinite(latitude) || latitude < -90 || latitude > 90) { + throw sourceError("reference_station_upstream_position_invalid"); + } + const name = firstString(value.tags["name:ru"], value.tags.name, value.tags.official_name, value.tags.loc_name); + if (!name) throw sourceError("reference_station_upstream_name_required"); + const category = classifyStation(value.tags, name); + return validateFact({ + sourceId: `osm.${value.type}.${value.id}`, + semanticType: category === "railway_terminal" ? "map.terminal" : "map.station", + observedAt, + receivedAt: observedAt, + attributes: compact({ + name, + category, + network: optionalString(value.tags.network), + operator: optionalString(value.tags.operator), + official_name: optionalString(value.tags.official_name), + local_name: optionalString(value.tags.loc_name), + uic_ref: optionalString(value.tags.uic_ref), + wheelchair: optionalString(value.tags.wheelchair), + }), + geometry: { type: "Point", coordinates: [longitude, latitude] }, + presentationStatus: "active", + }); +} + +function classifyStation(tags, name) { + if (tags.station === "subway" || tags.subway === "yes") return "metro"; + const terminalText = `${name} ${tags.loc_name || ""} ${tags.official_name || ""}`.toLocaleLowerCase("ru"); + if (/(?:^|\s)(вокзал|hauptbahnhof|central station|railway station)(?:\s|$)/u.test(terminalText)) { + return "railway_terminal"; + } + return "railway_station"; +} + +function cellsForBbox(bbox, cellDegrees) { + const cells = []; + const minX = Math.floor(bbox.west / cellDegrees); + const maxX = Math.ceil(bbox.east / cellDegrees) - 1; + const minY = Math.floor(bbox.south / cellDegrees); + const maxY = Math.ceil(bbox.north / cellDegrees) - 1; + for (let x = minX; x <= maxX; x += 1) { + for (let y = minY; y <= maxY; y += 1) { + const west = x * cellDegrees; + const south = y * cellDegrees; + cells.push({ + key: `${x}_${y}`, + west, + south, + east: Math.min(180, west + cellDegrees), + north: Math.min(90, south + cellDegrees), + }); + } + } + return cells; +} + +function factCoverage(facts, cellDegrees) { + const longitudes = facts.map((fact) => fact.geometry.coordinates[0]); + const latitudes = facts.map((fact) => fact.geometry.coordinates[1]); + return { + west: Math.floor(Math.min(...longitudes) / cellDegrees) * cellDegrees, + south: Math.floor(Math.min(...latitudes) / cellDegrees) * cellDegrees, + east: Math.ceil(Math.max(...longitudes) / cellDegrees) * cellDegrees, + north: Math.ceil(Math.max(...latitudes) / cellDegrees) * cellDegrees, + }; +} + +function cellInsideCoverage(cell, coverage) { + return cell.west >= coverage.west && cell.east <= coverage.east + && cell.south >= coverage.south && cell.north <= coverage.north; +} + +function normalizeBbox(value) { + const [west, south, east, north] = Array.isArray(value) ? value.map(Number) : []; + if (![west, south, east, north].every(Number.isFinite) + || west < -180 || west >= east || east > 180 + || south < -90 || south >= north || north > 90) { + throw sourceError("reference_station_bbox_invalid"); + } + return { west, south, east, north }; +} + +function factInside(fact, bbox) { + const [longitude, latitude] = fact.geometry.coordinates; + return longitude >= bbox.west && longitude <= bbox.east + && latitude >= bbox.south && latitude <= bbox.north; +} + +function deduplicateFacts(values) { + return [...new Map(values.map((fact) => [fact.sourceId, validateFact(fact)])).values()] + .sort((left, right) => left.sourceId.localeCompare(right.sourceId)); +} + +function searchIndexedFacts(values, query, limit) { + return [...values] + .flatMap((fact) => { + const rank = bestSearchRank([ + fact.sourceId, + fact.attributes.name, + fact.attributes.official_name, + fact.attributes.local_name, + fact.attributes.uic_ref, + ], query); + return rank === null ? [] : [{ fact, rank }]; + }) + .sort((left, right) => ( + left.rank - right.rank + || left.fact.attributes.name.localeCompare(right.fact.attributes.name, "ru") + || left.fact.sourceId.localeCompare(right.fact.sourceId) + )) + .slice(0, limit) + .map(({ fact }) => fact); +} + +function bestSearchRank(values, query) { + let best = null; + for (const value of values) { + const normalized = normalizeSearchValue(value); + if (!normalized) continue; + let rank = null; + if (normalized === query) rank = 0; + else if (normalized.startsWith(query)) rank = 1; + else if (normalized.split(/\s+/u).some((token) => token.startsWith(query))) rank = 2; + else if (normalized.includes(query)) rank = 3; + if (rank !== null && (best === null || rank < best)) best = rank; + } + return best; +} + +function normalizeSearchQuery(value) { + const normalized = normalizeSearchValue(value); + if (normalized.length < 2 || normalized.length > 96 || /[\u0000-\u001f\u007f]/u.test(normalized)) { + throw sourceError("reference_station_search_query_invalid"); + } + return normalized; +} + +function normalizeDisplaySearchQuery(value) { + const normalized = String(value ?? "").normalize("NFKC").trim().replace(/\s+/gu, " "); + if (normalized.length < 2 || normalized.length > 96 || /[\u0000-\u001f\u007f]/u.test(normalized)) { + throw sourceError("reference_station_search_query_invalid"); + } + return normalized; +} + +function normalizeSearchValue(value) { + return String(value ?? "") + .normalize("NFKC") + .trim() + .toLocaleLowerCase("ru") + .replace(/\s+/gu, " "); +} + +function escapeOverpassString(value) { + return String(value).replace(/[\\"]/gu, "\\$&"); +} + +async function readCell(root, key) { + try { + const value = JSON.parse(await readFile(withinRoot(root, `${key}.json`), "utf8")); + if (value?.schemaVersion !== "nodedc.map-reference-cell/v1" || value.key !== key + || !isIso(value.generatedAt) || !Array.isArray(value.facts) || value.facts.length > MAX_FACTS) return null; + return { ...value, facts: value.facts.map(validateFact) }; + } catch { + return null; + } +} + +async function readSearchIndex(file) { + try { + const value = JSON.parse(await readFile(file, "utf8")); + if (value?.schemaVersion !== "nodedc.map-reference-search-index/v1" + || !Array.isArray(value.facts) || value.facts.length > MAX_FACTS) return []; + return value.facts.map(validateFact); + } catch { + return []; + } +} + +async function writeSearchIndex(file, facts) { + const normalizedFacts = deduplicateFacts(facts).slice(-MAX_FACTS); + const document = { + schemaVersion: "nodedc.map-reference-search-index/v1", + generatedAt: new Date().toISOString(), + facts: normalizedFacts, + }; + const temp = `${file}.${process.pid}.${Date.now()}.tmp`; + await writeFile(temp, `${JSON.stringify(document)}\n`, { encoding: "utf8", mode: 0o640 }); + await rename(temp, file); +} + +async function writeCell(root, key, document) { + const target = withinRoot(root, `${key}.json`); + const temp = withinRoot(root, `${key}.${process.pid}.${Date.now()}.tmp`); + await writeFile(temp, `${JSON.stringify(document)}\n`, { encoding: "utf8", mode: 0o640 }); + await rename(temp, target); +} + +function normalizeOverpassEndpoint(value) { + let endpoint; + try { + endpoint = new URL(String(value || "")); + } catch { + throw sourceError("reference_station_upstream_url_invalid"); + } + if (endpoint.protocol !== "https:" || endpoint.username || endpoint.password + || endpoint.search || endpoint.hash || !endpoint.hostname) { + throw sourceError("reference_station_upstream_url_invalid"); + } + return endpoint.toString(); +} + +function withinRoot(root, child) { + const base = resolve(root); + const target = resolve(base, child); + if (target !== base && !target.startsWith(`${base}${sep}`)) throw sourceError("reference_station_path_escape"); + return target; +} + +function finite(value, min, max, code) { + const number = Number(value); + if (!Number.isFinite(number) || number < min || number > max) throw sourceError(code); + return number; +} + +function firstString(...values) { + return values.map(optionalString).find(Boolean); +} + +function optionalString(value) { + if (typeof value !== "string") return undefined; + const normalized = value.trim(); + return normalized && normalized.length <= 256 ? normalized : undefined; +} + +function compact(value) { + return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== undefined)); +} + +function isObject(value) { + return Boolean(value) && typeof value === "object" && !Array.isArray(value); +} + +function isIso(value) { + return typeof value === "string" && !Number.isNaN(Date.parse(value)); +} + +function sha256(value) { + return createHash("sha256").update(value).digest("hex"); +} + +function sourceError(code) { + const clientError = code === "reference_station_bbox_invalid" + || code === "reference_station_search_query_invalid"; + return Object.assign(new Error(code), { code, statusCode: clientError ? 400 : 500 }); +} + +function safeUpstreamFailure(error) { + const code = String(error?.message || ""); + if (/^reference_station_upstream_[a-z0-9_]+$/u.test(code)) return code.slice(0, 96); + if (error?.name === "AbortError") return "reference_station_upstream_timeout"; + return "reference_station_upstream_unavailable"; +} diff --git a/services/map-gateway/src/server.mjs b/services/map-gateway/src/server.mjs index 7f37241..f4ea9ce 100644 --- a/services/map-gateway/src/server.mjs +++ b/services/map-gateway/src/server.mjs @@ -7,6 +7,11 @@ import { Readable, Transform } from "node:stream"; import { pipeline } from "node:stream/promises"; import { fileURLToPath } from "node:url"; +import { + MAP_REFERENCE_SEARCH_SCHEMA, + TRANSPORT_STATION_PROFILE_ID, + createReferenceStationSource, +} from "./reference-station-source.mjs"; import { loadZoneSourceProfile } from "./zone-source-snapshot.mjs"; const canonicalCesiumAssetIds = ["1", "2", "96188"]; @@ -32,6 +37,14 @@ const zoneSourceRoot = resolve(String( // replaceable: today it is the audited MMap snapshot, later an API adapter can // atomically materialise the same manifest + generation envelope. const zoneSource = await loadZoneSourceProfile(zoneSourceRoot, zoneSourceProfileId); +const referenceStationSource = await createReferenceStationSource({ + seedFile: config.referenceStationSeedFile, + cacheDir: config.cacheDir, + fetchEnabled: config.referenceStationFetchEnabled, + overpassApiBase: config.referenceStationOverpassUrl, + cellDegrees: config.referenceStationCellDegrees, + timeoutMs: config.upstreamTimeoutMs, +}); const liveCache = createCacheStore("live", config.cacheDir, true); const offlineSnapshot = config.offlineSnapshotDir ? createCacheStore("offline-snapshot", config.offlineSnapshotDir, false) : null; const inflightWrites = new Map(); @@ -70,6 +83,15 @@ const server = createServer(async (request, response) => { } if (!isAllowedRequest(request)) return writeJson(response, 401, { ok: false, error: "map_gateway_auth_required" }); + if (requestUrl.pathname === `/api/map/reference-sources/v1/profiles/${TRANSPORT_STATION_PROFILE_ID}/current` + && ["GET", "HEAD"].includes(request.method || "")) { + return await serveReferenceStationSnapshot(request, response, requestUrl); + } + if (requestUrl.pathname === `/api/map/reference-sources/v1/profiles/${TRANSPORT_STATION_PROFILE_ID}/search` + && ["GET", "HEAD"].includes(request.method || "")) { + return await serveReferenceStationSearch(request, response, requestUrl); + } + if (requestUrl.pathname === "/healthz" && request.method === "GET") { return writeJson(response, 200, { ok: true, @@ -89,6 +111,9 @@ const server = createServer(async (request, response) => { sourceZoneCount: zoneSource.generation.metadata.sourceZoneCount, publishedZoneCount: zoneSource.generation.metadata.publishedZoneCount, }, + referenceSources: { + transportStations: await referenceStationSource.status(), + }, }); } @@ -126,6 +151,7 @@ server.listen(config.port, "0.0.0.0", () => { console.log(`Live map cache: ${config.cacheDir} (${config.mode}, max ${Math.round(config.maxCacheBytes / 1024 / 1024)} MB)`); if (offlineSnapshot) console.log(`Offline map snapshot: ${config.offlineSnapshotDir} (read-only)`); console.log(`Zone source: ${zoneSourceProfileId}@${zoneSource.generation.sourceRevision} (${zoneSource.generation.metadata.publishedZoneCount} zones)`); + console.log(`Map reference source: ${TRANSPORT_STATION_PROFILE_ID}`); }); process.on("SIGTERM", () => server.close()); @@ -146,6 +172,50 @@ function serveZoneSourceGeneration(request, response) { return response.end(request.method === "HEAD" ? undefined : zoneSource.body); } +async function serveReferenceStationSnapshot(request, response, requestUrl) { + const rawBbox = requestUrl.searchParams.get("bbox"); + const bbox = rawBbox ? rawBbox.split(",").map(Number) : undefined; + const snapshot = await referenceStationSource.snapshot({ bbox }); + const etag = `"sha256:${snapshot.contentDigest}"`; + if (request.headers["if-none-match"] === etag) { + response.writeHead(304, { ETag: etag, "Cache-Control": "private, max-age=300" }); + return response.end(); + } + const body = Buffer.from(`${JSON.stringify(snapshot)}\n`); + response.writeHead(200, { + "Content-Type": "application/json; charset=utf-8", + "Content-Length": body.byteLength, + "Cache-Control": "private, max-age=300", + ETag: etag, + "X-Content-Type-Options": "nosniff", + }); + return response.end(request.method === "HEAD" ? undefined : body); +} + +async function serveReferenceStationSearch(request, response, requestUrl) { + const search = await referenceStationSource.search({ + query: requestUrl.searchParams.get("q"), + limit: requestUrl.searchParams.get("limit"), + }); + if (search.schemaVersion !== MAP_REFERENCE_SEARCH_SCHEMA) { + throw new Error("reference_station_search_contract_invalid"); + } + const etag = `"sha256:${search.contentDigest}"`; + if (request.headers["if-none-match"] === etag) { + response.writeHead(304, { ETag: etag, "Cache-Control": "private, max-age=300" }); + return response.end(); + } + const body = Buffer.from(`${JSON.stringify(search)}\n`); + response.writeHead(200, { + "Content-Type": "application/json; charset=utf-8", + "Content-Length": body.byteLength, + "Cache-Control": "private, max-age=300", + ETag: etag, + "X-Content-Type-Options": "nosniff", + }); + return response.end(request.method === "HEAD" ? undefined : body); +} + async function readConfig() { const mode = String(process.env.MAP_CACHE_MODE || "readwrite").trim().toLowerCase(); if (!["readwrite", "readonly", "offline"].includes(mode)) throw new Error("invalid_map_cache_mode"); @@ -187,6 +257,13 @@ async function readConfig() { upstreamAllowlist: new Set(allowlist), legacyCacheHosts: new Set(parseList(process.env.MAP_GATEWAY_LEGACY_CACHE_HOSTS || "")), offlineProviderAllowlist: new Set(parseList(process.env.MAP_GATEWAY_OFFLINE_PROVIDER_ALLOWLIST || "")), + referenceStationSeedFile: String( + process.env.MAP_REFERENCE_STATION_SEED_FILE + || resolve(dirname(fileURLToPath(import.meta.url)), "../reference-sources/transport-stations/moscow-v1.json"), + ).trim(), + referenceStationFetchEnabled: parseBoolean(process.env.MAP_REFERENCE_STATION_FETCH_ENABLED, true), + referenceStationCellDegrees: Number(process.env.MAP_REFERENCE_STATION_CELL_DEGREES || 0.5), + referenceStationOverpassUrl: String(process.env.MAP_REFERENCE_STATION_OVERPASS_URL || "https://overpass-api.de/api/interpreter").trim(), corsOrigins: new Set(parseList(process.env.MAP_GATEWAY_CORS_ORIGIN || "http://127.0.0.1:3333,http://localhost:3333")), allowAnonymous: parseBoolean(process.env.MAP_GATEWAY_ALLOW_ANONYMOUS, process.env.NODE_ENV !== "production"), trustedSubjectHeader: String(process.env.MAP_GATEWAY_TRUSTED_SUBJECT_HEADER || "x-nodedc-user-id").toLowerCase(), diff --git a/services/map-gateway/test/reference-station-source.test.mjs b/services/map-gateway/test/reference-station-source.test.mjs new file mode 100644 index 0000000..1e81c7c --- /dev/null +++ b/services/map-gateway/test/reference-station-source.test.mjs @@ -0,0 +1,204 @@ +import assert from "node:assert/strict"; +import { mkdtemp, readFile } from "node:fs/promises"; +import { tmpdir } from "node:os"; +import { join, resolve } from "node:path"; +import test from "node:test"; +import { fileURLToPath } from "node:url"; + +import { + MAP_REFERENCE_SEARCH_SCHEMA, + MAP_REFERENCE_SNAPSHOT_SCHEMA, + TRANSPORT_STATION_PROFILE_ID, + createReferenceStationSource, +} from "../src/reference-station-source.mjs"; + +const root = resolve(fileURLToPath(new URL("..", import.meta.url))); +const seedFile = join(root, "reference-sources", "transport-stations", "moscow-v1.json"); + +test("packaged transport station profile is normalized and provider-neutral", async () => { + const cacheDir = await mkdtemp(join(tmpdir(), "nodedc-reference-stations-")); + const source = await createReferenceStationSource({ seedFile, cacheDir, fetchEnabled: false }); + const snapshot = await source.snapshot(); + assert.equal(snapshot.schemaVersion, MAP_REFERENCE_SNAPSHOT_SCHEMA); + assert.equal(snapshot.profileId, TRANSPORT_STATION_PROFILE_ID); + assert.equal(snapshot.complete, true); + assert.equal(snapshot.metadata.factCount, 638); + assert.deepEqual(snapshot.metadata.categoryCounts, { + metro: 273, + railway_station: 357, + railway_terminal: 8, + }); + assert.ok(snapshot.facts.every((fact) => !JSON.stringify(fact).match(/https?:|token|credential|endpoint/i))); + assert.ok(snapshot.facts.every((fact) => ["map.station", "map.terminal"].includes(fact.semanticType))); +}); + +test("bbox inside the seed spatial-cell coverage never waits for upstream", async () => { + const cacheDir = await mkdtemp(join(tmpdir(), "nodedc-reference-stations-")); + let calls = 0; + const source = await createReferenceStationSource({ + seedFile, + cacheDir, + cellDegrees: 0.5, + fetchImpl: async () => { + calls += 1; + throw new Error("seed coverage must not call upstream"); + }, + }); + const snapshot = await source.snapshot({ bbox: [36.9, 55.4, 38.2, 56.1] }); + assert.equal(calls, 0); + assert.equal(snapshot.complete, true); + assert.equal(snapshot.metadata.requestedCellCount, 12); + assert.ok(snapshot.facts.length > 0); +}); + +test("bbox fetch uses one cached spatial cell and never exposes upstream payload", async () => { + const cacheDir = await mkdtemp(join(tmpdir(), "nodedc-reference-stations-")); + let calls = 0; + const source = await createReferenceStationSource({ + seedFile, + cacheDir, + cellDegrees: 1, + fetchImpl: async () => { + calls += 1; + return new Response(JSON.stringify({ + elements: [{ + type: "node", + id: 987654321, + lat: 59.93, + lon: 30.31, + tags: { railway: "station", station: "subway", name: "Тестовая", website: "https://not-projected.invalid" }, + }], + }), { status: 200, headers: { "content-type": "application/json" } }); + }, + }); + const first = await source.snapshot({ bbox: [30, 59, 31, 60] }); + const second = await source.snapshot({ bbox: [30, 59, 31, 60] }); + assert.equal(calls, 1); + assert.ok(first.facts.some((fact) => fact.sourceId === "osm.node.987654321")); + assert.deepEqual(first.facts, second.facts); + assert.ok(!JSON.stringify(first).includes("not-projected")); + const cached = JSON.parse(await readFile(join(cacheDir, "reference-features", TRANSPORT_STATION_PROFILE_ID, "30_59.json"), "utf8")); + assert.equal(cached.schemaVersion, "nodedc.map-reference-cell/v1"); +}); + +test("viewport cells use bounded concurrency and deduplicate inflight fetches", async () => { + const cacheDir = await mkdtemp(join(tmpdir(), "nodedc-reference-stations-")); + let active = 0; + let maximumActive = 0; + let calls = 0; + const starts = []; + const source = await createReferenceStationSource({ + seedFile, + cacheDir, + cellDegrees: 0.5, + fetchImpl: async () => { + calls += 1; + starts.push(Date.now()); + active += 1; + maximumActive = Math.max(maximumActive, active); + await new Promise((resolveDelay) => setTimeout(resolveDelay, 15)); + active -= 1; + return new Response(JSON.stringify({ elements: [] }), { + status: 200, + headers: { "content-type": "application/json" }, + }); + }, + }); + const bbox = [29.9, 59.7, 30.9, 60.2]; + await Promise.all([source.snapshot({ bbox }), source.snapshot({ bbox })]); + assert.equal(calls, 6); + assert.ok(maximumActive <= 2); + assert.ok(starts.slice(1).every((startedAt, index) => startedAt - starts[index] >= 650)); + const status = await source.status(); + assert.equal(status.activeFetches, 0); + assert.equal(status.queuedFetches, 0); + assert.equal(status.upstreamState, "ready"); +}); + +test("Russian name wins and upstream failures are safe diagnostics", async () => { + const cacheDir = await mkdtemp(join(tmpdir(), "nodedc-reference-stations-")); + let fail = false; + const source = await createReferenceStationSource({ + seedFile, + cacheDir, + cellDegrees: 1, + fetchImpl: async () => { + if (fail) throw new TypeError("getaddrinfo EAI_AGAIN overpass.internal.example"); + return new Response(JSON.stringify({ + elements: [{ + type: "node", + id: 987654322, + lat: 59.93, + lon: 30.31, + tags: { + railway: "station", + station: "subway", + name: "Petrogradskaya", + "name:ru": "Петроградская", + }, + }], + }), { status: 200, headers: { "content-type": "application/json" } }); + }, + }); + const snapshot = await source.snapshot({ bbox: [30, 59, 31, 60] }); + assert.equal(snapshot.facts[0].attributes.name, "Петроградская"); + + fail = true; + await source.snapshot({ bbox: [31, 59, 32, 60] }); + const status = await source.status(); + assert.equal(status.upstreamState, "degraded"); + assert.equal(status.lastFailure, "reference_station_upstream_unavailable"); + assert.ok(status.lastFailureAt); + assert.ok(!JSON.stringify(status).includes("overpass.internal.example")); +}); + +test("global station search is normalized, deduplicated and persisted", async () => { + const cacheDir = await mkdtemp(join(tmpdir(), "nodedc-reference-stations-")); + let calls = 0; + const source = await createReferenceStationSource({ + seedFile, + cacheDir, + fetchImpl: async (_url, options) => { + calls += 1; + const body = new URLSearchParams(options.body); + assert.match(body.get("data"), /Петроградская/u); + return new Response(JSON.stringify({ + elements: [{ + type: "node", + id: 987654323, + lat: 59.96639, + lon: 30.3113, + tags: { + railway: "station", + station: "subway", + name: "Petrogradskaya", + "name:ru": "Петроградская", + website: "https://not-projected.invalid", + }, + }], + }), { status: 200, headers: { "content-type": "application/json" } }); + }, + }); + const first = await source.search({ query: "Петроградская", limit: 8 }); + const second = await source.search({ query: "Петроградская", limit: 8 }); + assert.equal(first.schemaVersion, MAP_REFERENCE_SEARCH_SCHEMA); + assert.equal(first.complete, true); + assert.equal(calls, 1); + assert.deepEqual(first.facts, second.facts); + assert.equal(first.facts[0].attributes.name, "Петроградская"); + assert.ok(!JSON.stringify(first).includes("not-projected")); + const persisted = JSON.parse(await readFile( + join(cacheDir, "reference-features", `${TRANSPORT_STATION_PROFILE_ID}.search.json`), + "utf8", + )); + assert.equal(persisted.schemaVersion, "nodedc.map-reference-search-index/v1"); + + const restarted = await createReferenceStationSource({ + seedFile, + cacheDir, + fetchEnabled: false, + }); + const cached = await restarted.search({ query: "Петроградская", limit: 8 }); + assert.equal(cached.complete, true); + assert.equal(cached.facts[0].sourceId, "osm.node.987654323"); +});