В этом примере показано, как удалить разрывы координат долготы на пересечении линий даты, которые могут спутать операции набора на многоугольниках. Это может произойти, когда точки с долготами около 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);
Сплюсните окружность и постройте график как красную линию. Обратите внимание, что вторая малая окружность, не покрывающая полюс, обрезается на две части вдоль линии даты. Многоугольник для первого малого круга нанесен в плоскостных координатах, чтобы проиллюстрировать его уплощенную форму. The flatearthpoly
функция принимает, что внутренняя часть сплющиваемого многоугольника находится в полусфере, которая содержит большинство его краевых точек. Таким образом, многоугольник, полученный flatearthpoly
не покрывает больше, чем полусфера.
[latf1,lonf1] = flatearthpoly(latc1,lonc1);
plotm(latf1,lonf1,'r')
flatearthpoly
| ispolycw
| poly2ccw
| poly2cw