Посмотрите на ваш рендеринг Канады, особенно южного побережья звука Гудзона. Существует очень очевидная ошибка. Просеивая данные пути, я нашел следующую последовательность в исходных данных:
h-2.28l-.91-.6-.92-.59H188.65l-1.03.02-.74-.07-.75-.07-.74-.07-.74-.06.88 1.09
Я загрузил ваш результат рендеринга в Inkscape и нарисовал соответствующую часть пути сверху, стрелка, отмечающая сегмент, нарисованный абсолютной H-командой. (Команда z была удалена, что является причиной пропуска сегмента.) Очевидно, что где-то там сегмент слишком длинный.
Получается, что абсолютная H
исправляет предыдущую (горизонтальную) ошибку. Посмотрите на предыдущий пункт: это 198., 143.
, но это должно быть 191.76,146.07
. Вертикальная ошибка остается на уровне -3,6.
Я создал кодовую ручку , которая максимально точно накладывает исходные данные пути на ваш рендеринг. Данные пути были разделены на (одно-полигональные) группы и преобразованы в абсолютные с помощью Inkscape. К сожалению, программа не может преобразовать их в полигональные примитивы, поэтому там все еще есть команды V и H.
Это показывает это:
- Начальная точка пути совпадает.
- Точка, описанная абсолютной H-командой, имеет совпадающее горизонтальное значение, но не вертикальное. (Это единственная абсолютная команда на всем пути.)
- Кажется, что каждая группа путей (многоугольник) согласована сама по себе, но кроме
group0
все они удалены со своего предназначенного места.
Я провел некоторые визуальные измерения этого отклонения (ошибка ~ 0,05), и они в конечном итоге дают подсказку:
group01: 0.44,-0.73
group02: 0.84,-1.12
group03: 2.04,-1.44
group04: 2.94,-1.73
group05: 2.60,-1.86
group06: 3.14,-2.38
group07: 3.68,-2.54
group08: 4.03,-3.35
group09: 4.87,-2.97
group10: 6.08,-3.50 (begin)
group10: 0.00,-3.53 (end)
group11: 1.08,-1.95
group12: 2.05,-2.45
group13: 2.89,-2.84
group14: 3.64,-3.67
group15: 4.48,-3.44
group16: 4.04,-3.99
group17: 4.32,-3.08
group18: 4.75,-2.75
group19: 5.72,-2.95
group20: 5.40,-3.11
group21: 6.02,-2.95
group22: 6.63,-4.14
group23: 6.85,-5.00
group24: 7.14,-4.86
group25: 7.72,-4.39
group26: 8.65,-4.75
group27: 9.49,-4.39
group28: 10.20,-4.44
group29: 11.13,-4.58
Вы удаляете команды closepath
, а затем вычисляете первую точку следующей группы относительно последней явной точки последней группы. Но closepath
фактически перемещает текущую точку: обратно в положение последней команды moveto
. Они могут, но не обязательно быть идентичными.
Я не могу дать вам готовый скрипт на R, но вам нужно сделать следующее: в начале новой группы кешируйте позицию первой точки. В начале следующей группы вычислите новую первую точку относительно этой кэшированной точки.