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