Получение координат Linestring для дорог с помощью OSM

Я пытаюсь получить дорожную сеть в районе, ориентируясь на меньшие (1-2 полосы) дороги, используя osm и node. Используя OSM overpass API, я использовал следующий запрос:

const roadsOverpassQuery = `
[out:json];
(way[lanes=1](${bbox}); way[lanes=2](${bbox}); );
out;
`;

Я смог получить многие дороги в ограничивающей рамке. Я заметил, что эти дороги при преобразовании в объекты geojson имеют узлы

 {
"_id": {
  "$oid": "643c3fd883215e96ece3be0a"
 {,
"type": "way",
"id": 5053100,
"nodes": [
  33979706,
  33979705
],
"tags": {
  "adot_name": "Tucson-Benson Highway",
  "bicycle": "yes",
  "hgv": "designated",
  "highway": "motorway",
  "lanes": "2",
  "maxspeed": "75 mph",
  "old_ref": "US 80 (old AZ 86)",
  "oneway": "yes",
  "ref": "I 10"
}

Я передал их в overpass API, используя

const overpassQuery = `
[out:json];
(
  ${nodeIds.map(id => `node(${id})`).join(';')};
);
out;

`;

Они как geojson выглядят так:

"features": [
  {
    "type": "Feature",
    "id": "node/33979705",
    "properties": {
      "highway": "motorway_junction",
      "ref": "292",
      "id": "node/33979705"
    },
    "geometry": {
      "type": "Point",
      "coordinates": [
        -110.5123291,
        31.9766748
      ]
    }
  },
  {
    "type": "Feature",
    "id": "node/33979706",
    "properties": {
      "id": "node/33979706"
    },
    "geometry": {
      "type": "Point",
      "coordinates": [
        -110.5141282,
        31.9773252
      ]
    }
  }
]

Я заметил, что тип геометрии — точка. В других местах я видел дороги, состоящие из Linestrings:

{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
  [-122.483696, 37.833818],
  [-122.483482, 37.833174],
  [-122.483396, 37.8327],
  [-122.483568, 37.832056],
  [-122.48404, 37.831141],
  [-122.48404, 37.830497],
  [-122.483482, 37.82992],
  [-122.483568, 37.829548],
  [-122.48507, 37.828802],
  [-122.4861, 37.828387],
  [-122.486958, 37.828138],
  [-122.487001, 37.827885]
 ]
},
"properties": {
"name": "Example LineString"
}
}

Как получить координаты Linestring интересующих дорог?

Согласно этого комментария , вы можете использовать оператор геометрии в операторе преобразования. Используя идентификатор пути в вашем вопросе, запрос будет выглядеть так: [out:json]; way(5053100); convert item ::=::,::geom=geom(),_osm_type=type(); out geom; Вот пример. Это относится к вашему вопросу? Если да, я могу написать это как ответ — если нет, то что я упускаю?

jsejcksn 23.04.2023 01:56

Чем вы, это выглядит интересно. Не могли бы вы написать это как ответ?

user1592380 23.04.2023 02:27
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Согласно этому комментарию на справочном форуме OSM, вы можете использовать геометрический оператор в операторе преобразования вместе с geom выходным аргументом.

Используя идентификатор пути в вашем вопросе, запрос будет выглядеть так:

[out:json];
way(5053100);
convert item ::=::,::geom=geom(),_osm_type=type();
out geom;

Вот пример исполняемого фрагмента:

Игровая площадка ТС

function fetchOverpassJson(query) {
  return fetch("https://overpass-api.de/api/interpreter", {
    body: new URLSearchParams([["data", query]]),
    method: "POST",
  }).then(res => res.json());
}

const query = `
[out:json];
way(5053100);
convert item ::=::,::geom=geom(),_osm_type=type();
out geom;
`;

fetchOverpassJson(query).then(console.info);

А вот статический вывод кода выше на момент выполнения запроса:

{
  "version": 0.6,
  "generator": "Overpass API 0.7.60 f4c14d41",
  "osm3s": {
    "timestamp_osm_base": "2023-04-23T14:58:09Z",
    "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL."
  },
  "elements": [
    {
      "type": "item",
      "id": 1,
      "geometry": {
        "type": "LineString",
        "coordinates": [
          [
            -110.5141282,
            31.9773252
          ],
          [
            -110.5123291,
            31.9766748
          ]
        ]
      },
      "tags": {
        "adot_name": "Tucson-Benson Highway",
        "bicycle": "yes",
        "hgv": "designated",
        "highway": "motorway",
        "lanes": "2",
        "maxspeed": "75 mph",
        "old_ref": "US 80 (old AZ 86)",
        "oneway": "yes",
        "ref": "I 10",
        "_osm_type": "way"
      }
    }
  ]
}

Другие вопросы по теме