www.gusucode.com > map 案例源码 matlab代码程序 > map/DrapeGeolocatedGridOnRegularDataGridViaTextureMappingExample.m
%% Drape Geolocated Grid on Regular Data Grid via Texture Mapping % This example shows how to create a new regular data grid that covers the % region of the geolocated data grid, then embed the color data values into % the new matrix. The new matrix might need to have somewhat lower % resolution than the original, to ensure that every cell in the new map % receives a value. The example combines dissimilar data grids by creating % a new regular data grid that covers the region of the geolocated data % grid's z-data. This approach has the advantage that more computational % functions are available for regular data grids than for geolocated ones. % Color and elevation grids do not have to be the same size. If the % resolutions of the two data grids are different, you can create the % surface as a three-dimensional elevation map and later apply the colors % as a texture map. You do this by setting the surface |CData| property to % contain the color matrix, and setting the surface face color to % |'texturemap'|. %% % Load the |topo| MAT-file and individual variables containing terrain data % from the |mapmtx| MAT-file. % Copyright 2015 The MathWorks, Inc. load topo topo load mapmtx lt1 lg1 map1 %% % Identify the geograpic limits of the geolocated grid that was loaded from % |mapmtx|. latlim(1) = 2*floor(min(lt1(:))/2); lonlim(1) = 2*floor(min(lg1(:))/2); latlim(2) = 2*ceil(max(lt1(:))/2); lonlim(2) = 2*ceil(max(lg1(:))/2); %% % Reference the global topo data to latitude and longitude and then trim it % to the rectangular region enclosing the smaller grid. topoR = georasterref('RasterSize',size(topo), ... 'LatitudeLimits',[-90 90],'LongitudeLimits',[0 360]); [topo1,topo1R] = maptrims(topo,topoR,latlim,lonlim); %% % Allocate a regular grid filled uniformly with |-Inf|, to receive texture % data. cellsPerDegree = .5; [L1,L1R] = zerom(latlim,lonlim,cellsPerDegree); L1 = L1 - Inf; %% % Overwrite |L1| using |imbedm|, converting it from a geolocated grid to a % regular grid, in which the values come from the discrete Laplacian of the % elevation grid |map1|. L1 = imbedm(lt1,lg1,del2(map1),L1,L1R); %% % Set up a map axes with the Miller projection and use |meshm| to draw the % |topo1| extract of the |topo| DEM. Render the figure as a 3-D view from a % 20 degree azimuth and 30 degree altitude, and exaggerate the vertical % dimension by a factor of 200. Both the surface relief and coloring % represent topographic elevation. figure axesm miller h = meshm(topo1,topo1R,size(topo1),topo1); view(20,30) daspectm('m',200) %% % Apply the |L1| matrix as a texture map directly to the surface using % the |set| function. The area not covered by the |[lt1, lg1, map1]| % geolocated data grid appears dark blue because the corresponding elements % of L1 were set to -Inf. h.CData = L1; h.FaceColor = 'texturemap'; material shiny camlight lighting gouraud axis tight