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