Фон
Мы снабжены некоторыми данными AIXM (надмножество GML на основе XML), которые описывают полигональные области на карте как смесь GeodesicStrings (список координат) и ArcByCentrePoints (координата центральной точкис радиусом, начальный подшипник и конечный подшипник).Мы берем эти данные и преобразуем их в простой список координат, который затем отображаем с помощью полилинии карт Google.
Задача
Когда мы строим фигуру с дугой, начало и конецточки дуги обычно не совпадают с конечной точкой предыдущей линии и начальной точкой следующей линии.Выглядит так, как будто радиальное расстояние отсутствует на величину, которая, кажется, не пропорциональна радиусу.Смотрите скриншот: интересно, что меньшая дуга вверху кажется хорошей, но большая дуга вставлена.
![Bad arc](https://i.stack.imgur.com/czuUc.png)
Мы почти уверены, что данные верны, потому чтоэто выглядит нормально, когда мы используем сторонний инструмент для его визуализации, поэтому мы делаем что-то не так.
Реализация
Мы используем библиотеку turf.js дляпреобразовать описание дуги в набор точек, используя функцию lineArc .Внутренне это использует их функцию destination , которая "использует формулу Хаверсайна для учета глобальной кривизны" .Мы скомбинируем эти сгенерированные точки в правильной последовательности с точками, взятыми непосредственно из предыдущего и последующих элементов GeodesicString, чтобы получить наш конечный многоугольник.
Данные
Помощь!
ЯЯ знаю, что этот вопрос не слишком полезен для кода, но я надеюсь, что описал проблему адекватно, и что какой-то добрый человек с большим знанием ГИС, чем я (> 0), мог бы указать мне правильное направление.Спасибо :)