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

Этот пример показывает, как удалить разрывы координаты долготы при пересечениях линии перемены даты, которые могут перепутать операции присвоения на полигонах. Это может произойти, когда точки с долготами около 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')