Мне нужно написать синтаксический анализатор на C ++, который позволяет мне создавать тип геометрии geojson из допустимой строки WKT.
Итак, у меня есть действительная строка WKT в качестве входных данных, и мне нужно преобразовать ее и записать все координаты и т. Д. С помощью rapidjson.
Что меня интересует, так это соответствие Geojson и WKT с точки зрения синтаксического анализа. Например, кажется, что тип многоугольника Geojson соответствует координатам и порядку внешних / внутренних колец.
Итак, являются ли типы Geojson и WKT эквивалентными с точки зрения порядка координат и внутренней структуры для всех типов (точка, линейная строка, мультиполигон?
Это сделало бы преобразование почти тривиальным.
WKT идеально подходит для наборов данных чрезвычайно высокой точности, поскольку он может поддерживать различные CRS ‘. Однако системой координат для всех координат GeoJSON является WGS 84. Таким образом, в дополнение к географической системе координат, формат WKT может также описывать, как комбинировать геоцентрические, проектные, вертикальные, временные и инженерные системы координат; в то время как «GeoJSON не ограничивает вас долготой, широтой, высотой … многомерные данные не так распространены, поскольку гибкость GeoJSON не соответствует другим форматам».
Другое ключевое отличие WKT от GeoJSON заключается в том, что GeoJSON (на основе JSON) чувствителен к регистру, а WKT — нет. WKT также способен поддерживать изогнутые формы, а GeoJSON — нет.
Таким образом, существует определенная потребность в инструментах преобразования. После дальнейших исследований вы можете найти несколько WKT-парсеров, генерирующих GeoJSON, в том числе созданный Томом МакВрайтом (для браузеров и узлов), который позволяет пользователям анализировать и преобразовывать хорошо известный текст в GeoJSON.
Не уверен, что вы поняли это, но хотели бы дать ответ для всех, кто может быть заинтересован.
Источники:
https://tools.ietf.org/html/rfc7946#section-4
http://www.macwright.org/2015/03/23/geojson-second-bite.html#coordinate
Других решений пока нет …