Есть OpenSource-скрипт osm2geojson-lite (
github.com/tibetty/osm2ge... ) он сейчас написан на JavaScript (TypeScript).
Данный скрипт производит конвертацию JSON-объекта OpenStreetMap Element в формат GeoJSON (географический полигон).
Вкратце логика работы: скрипт проходится по всем линиям (members type=way) в исходном объекте, находит линии с совпадающими координатами начала и конца, замыкает их, далее ищет замкнутые круги и объединяет их в полигон (MultiPolygon), добавляет туда точки (members type=node) и оформляет это в формат GeoJSON.
Нужно взять уже реализованную логику работы этого скрипта и переписать её
на языке PHP либо аналогичным образом как в JS либо более оптимальным алгоритмом.
Необходимо реализовать обработку входящих данных только в формате JSON, поэтому функцию analyzeFeaturesFromXml (90 строк) и код из файла "xmlparser" (180 строк) можно не переписывать вообще, итого остаётся около 700 строк.
Входящие данные для обработки это json_decode ответа сервиса Overpass (
overpass-turbo.eu/) с элементами карты OpenStreetMap. На выходе нужно получить PHP-объект в формате GeoJSON.
Проверить итоговый GeoJSON с валидацией можно тут:
geojsonlint.com/ Также можно просто построчно сравнить результат обработки JS-версии и PHP-версии, они должны совпадать.
Есть ещё один аналогичный скрипт
github.com/tyrasd/osmtoge... но он работает в разы медленнее и код менее читаемый, так что лучше базироваться на osm2geojson-lite.
Более подробная информация в приложенном PDF-файле с техническим заданием.