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