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