www.gusucode.com > map 案例源码 matlab代码程序 > map/RemoveLongitudeCoordDisconAtDateLineCrossingsExample.m
%% Remove Longitude Coordinate Discontinuities at Date Line Crossings % This example shows how to remove longitude coordinate discontinuities at % date line crossings that can confuse set operations on polygons. This can % happen when points with longitudes near 180 degrees connect to points % with longitudes near -180 degrees, as might be the case for eastern % Siberia and Antarctica, and also for small circles and other patch % objects. To prepare geographic data for use with |polybool| or for patch % rendering, cut the polygons at the date line with the % <docid:map_ref.f13-571416> function. |flatearthpoly| returns a polygon % with points inserted to follow the date line up to the pole, traverse the % longitudes at the pole, and return to the date line crossing along the % other edge of the date line. % % Note: The toolbox display functions automatically cut and trim % geographic data if required by the map projection. Use |flatearthpoly| % only when performing set operations on polygons. %% % Create an orthographic view of the Earth and plot the coastlines on it. % Copyright 2015 The MathWorks, Inc. axesm ortho setm(gca,'Origin', [60 170]); framem on; gridm on load coastlines plotm(coastlat,coastlon) %% % Generate a small circle that encompasses the North Pole and color it % yellow. [latc,lonc] = scircle1(75,45,30); patchm(latc,lonc,'y') %% % Flatten the small circle using the |flatearthpoly| function. [latf,lonf] = flatearthpoly(latc,lonc); %% % Plot the cut circle that you just generated as a magenta line. plotm(latf,lonf,'m') %% % Generate a second small circle that does not include a pole. [latc1 lonc1] = scircle1(20, 170, 30); %% % Flatten the circle and plot it as a red line. Note that the second small % circle, which does not cover a pole, is clipped into two pieces along the % date line. The polygon for the first small circle is plotted in plane % coordinates to illustrate its flattened shape. The |flatearthpoly| % function assumes that the interior of the polygon being flattened is in % the hemisphere that contains most of its edge points. Thus a polygon % produced by |flatearthpoly| does not cover more than a hemisphere. [latf1,lonf1] = flatearthpoly(latc1,lonc1); plotm(latf1,lonf1,'r')