Удалите разрывы координаты долготы при пересечениях линии перемены даты

В этом примере показано, как удалить разрывы координаты долготы при пересечениях линии перемены даты, которые могут перепутать операции присвоения на многоугольниках. Это может произойти, когда точки с долготами около 180 градусов соединяются с точками с долготами около-180 градусов, как может иметь место для Восточной Сибири и Антарктиды, и также для маленьких кругов и других объектов закрашенной фигуры. Подготовить географические данные к использованию с polybool или для рендеринга закрашенной фигуры, сокращения многоугольники в линии перемены даты с flatearthpoly функция. flatearthpoly возвращает многоугольник с точками, вставленными, чтобы следовать за линией перемены даты до полюса, пересечь долготы в полюсе и возвратиться к линии перемены даты, пересекающейся вдоль другого ребра линии перемены даты.

Примечание: тулбокс отображает функции автоматически сокращение и обрезает географические данные при необходимости проекцией карты. Используйте flatearthpoly только при выполнении операций присвоения на многоугольниках.

Создайте ортогональное представление Земли и постройте береговые линии на ней.

axesm ortho
setm(gca,'Origin', [60 170]); framem on; gridm on
load coastlines
plotm(coastlat,coastlon)

Сгенерируйте маленький круг, который охватывает Северный полюс, и окрасьте его в желтый.

[latc,lonc] = scircle1(75,45,30);
patchm(latc,lonc,'y')

Сгладьте маленький круг с помощью flatearthpoly функция.

[latf,lonf] = flatearthpoly(latc,lonc);

Постройте круг сокращения, который вы только сгенерировали как пурпурная линия.

plotm(latf,lonf,'m')

Сгенерируйте второй маленький круг, который не включает полюс.

[latc1 lonc1] = scircle1(20, 170, 30);

Сгладьте круг и постройте его как красную линию. Обратите внимание на то, что второй маленький круг, который не покрывает полюс, отсекается в две части вдоль линии перемены даты. Многоугольник для первого маленького круга построен в координатах на плоскости, чтобы проиллюстрировать его сглаженную форму. flatearthpoly функция принимает, что внутренняя часть сглаженного многоугольника находится в полушарии, которое содержит большинство его точек ребра. Таким образом многоугольник производится flatearthpoly не покрывает больше, чем полушарие.

[latf1,lonf1] = flatearthpoly(latc1,lonc1);
plotm(latf1,lonf1,'r')