Changeset 7342


Ignore:
Timestamp:
02/04/11 14:43:13 (14 years ago)
Author:
jschierm
Message:

kml: Converted all utilities to use lat/long fields in model rather than x/y, converting if necessary.

Location:
issm/trunk/src/m/kml
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/m/kml/kml_mesh_elem.m

    r7132 r7342  
    1111%
    1212%  and the optional input is:
     13%    latsgn        (numeric, +1/-1 for north/south latitude)
    1314%    data          (numeric, element or nodal results data)
    1415%    alt           (numeric, altitude for polygons, default 10000)
     
    4344    if ischar(varargin{iarg})
    4445        if ~isempty(strmatch(varargin{iarg},...
    45                 {'data','alt',...
     46                {'latsgn','data','alt',...
    4647                 'cmin','cmax','cmap'},...
    4748                'exact'))
     
    5859    end
    5960    iarg=iarg+2;
     61end
     62
     63if isempty(md.lat)  || ((numel(md.lat) == 1)  && isnan(md.lat)) || ...
     64   isempty(md.long) || ((numel(md.long) == 1) && isnan(md.long))
     65    if     ~exist('latsgn')
     66        error(['Missing ''latsgn'' parameter to calculate missing lat/long data.']);
     67    elseif (abs(latsgn) ~= 1)
     68        error(['Incorrect latsgn=' num2str(latsgn) ' parameter to calculate missing lat/long data.']);
     69    else
     70        display('Converting x/y data to lat/long data.');
     71        [md.lat,md.long]=xy2ll(md.x,md.y,latsgn);
     72    end
    6073end
    6174
     
    143156
    144157    for j=1:size(md.elements,2)
    145         [lat,long]=xy2ll(md.x(md.elements(i,j)),md.y(md.elements(i,j)),-1);
    146         kring.coords(j,:)=[long lat alt];
     158        kring.coords(j,:)=[md.long(md.elements(i,j)) md.lat(md.elements(i,j)) alt];
    147159    end
    148160    kring.coords(end,:)=kring.coords(1,:);
  • issm/trunk/src/m/kml/kml_mesh_write.m

    r7338 r7342  
    1212%
    1313%  and the optional input is:
     14%    lats          (numeric, +1/-1 for north/south latitude)
    1415%    data          (numeric, element or nodal results data)
    1516%    alt           (numeric, altitude for polygons, default 10000)
     
    4950    if ischar(varargin{iarg})
    5051        if ~isempty(strmatch(varargin{iarg},...
    51                 {'data','alt','lwidth','popac',...
     52                {'latsgn','data','alt','lwidth','popac',...
    5253                 'cmin','cmax','cmap','prtplt'},...
    5354                'exact'))
     
    6465    end
    6566    iarg=iarg+2;
     67end
     68
     69if isempty(md.lat)  || ((numel(md.lat) == 1)  && isnan(md.lat)) || ...
     70   isempty(md.long) || ((numel(md.long) == 1) && isnan(md.long))
     71    if     ~exist('latsgn')
     72        error(['Missing ''latsgn'' parameter to calculate missing lat/long data.']);
     73    elseif (abs(latsgn) ~= 1)
     74        error(['Incorrect latsgn=' num2str(latsgn) ' parameter to calculate missing lat/long data.']);
     75    else
     76        display('Converting x/y data to lat/long data.');
     77        [md.lat,md.long]=xy2ll(md.x,md.y,latsgn);
     78    end
    6679end
    6780
  • issm/trunk/src/m/kml/kml_part_edges.m

    r7132 r7342  
    1111%
    1212%  and the optional input is:
     13%    latsgn        (numeric, +1/-1 for north/south latitude)
    1314%    data          (numeric, element or nodal results data)
    1415%    alt           (numeric, altitude for polygons, default 10000)
     
    4445    if ischar(varargin{iarg})
    4546        if ~isempty(strmatch(varargin{iarg},...
    46                 {'data','alt',...
     47                {'latsgn','data','alt',...
    4748                 'cmin','cmax','cmap','prtplt'},...
    4849                'exact'))
     
    5960    end
    6061    iarg=iarg+2;
     62end
     63
     64if isempty(md.lat)  || ((numel(md.lat) == 1)  && isnan(md.lat)) || ...
     65   isempty(md.long) || ((numel(md.long) == 1) && isnan(md.long))
     66    if     ~exist('latsgn')
     67        error(['Missing ''latsgn'' parameter to calculate missing lat/long data.']);
     68    elseif (abs(latsgn) ~= 1)
     69        error(['Incorrect latsgn=' num2str(latsgn) ' parameter to calculate missing lat/long data.']);
     70    else
     71        display('Converting x/y data to lat/long data.');
     72        [md.lat,md.long]=xy2ll(md.x,md.y,latsgn);
     73    end
    6174end
    6275
     
    221234%  if first edge, write out first node
    222235                    if ~elast
    223                         [lat,long]=xy2ll(md.x(edgeper(j,1)),md.y(edgeper(j,1)),-1);
    224                         kline.coords(end+1,:)=[long lat alt];
     236                        kline.coords(end+1,:)=[md.long(edgeper(j,1)) md.lat(edgeper(j,1)) alt];
    225237                    end
    226                     [lat,long]=xy2ll(md.x(edgeper(j,2)),md.y(edgeper(j,2)),-1);
    227                     kline.coords(end+1,:)=[long lat alt];
     238                    kline.coords(end+1,:)=[md.long(edgeper(j,2)) md.lat(edgeper(j,2)) alt];
    228239                    elast=elemper(j);
    229240                    nlast=edgeper(j,2);
     
    312323%  write out first node of first side for half-edge to midpoint
    313324%                                disp(['segment j=' int2str(j) ' unshared half edge from node ' int2str(elemp(ielem,nlast)) ' (node ' int2str(nlast) ') on side ' int2str(slast) ' from element ' int2str(ielem) ' written.'])
    314                                 [lat,long]=xy2ll((md.x(elemp(ielem,nlast))),...
    315                                                  (md.y(elemp(ielem,nlast))),-1);
    316                                 kline.coords(end+1,:)=[long lat alt];
     325                                kline.coords(end+1,:)=[md.long(elemp(ielem,nlast)) ...
     326                                                       md.lat(elemp(ielem,nlast)) alt];
    317327                            end
    318328                            nlast=0;
    319329                           
    320330%  write out midpoint of first side
    321                             [lat,long]=xy2ll((md.x(elemp(ielem,slast))...
    322                                              +md.x(elemp(ielem,mod(slast,3)+1)))/2.,...
    323                                              (md.y(elemp(ielem,slast))...
    324                                              +md.y(elemp(ielem,mod(slast,3)+1)))/2.,-1);
    325                             kline.coords(end+1,:)=[long lat alt];
     331                            kline.coords(end+1,:)=[(md.long(elemp(ielem,slast))...
     332                                                   +md.long(elemp(ielem,mod(slast,3)+1)))/2. ...
     333                                                   (md.lat(elemp(ielem,slast))...
     334                                                   +md.lat(elemp(ielem,mod(slast,3)+1)))/2. alt];
    326335                        end
    327336
     
    362371%  write out half-edge from current node to midpoint of unshared side
    363372%                            disp(['segment j=' int2str(j) ' unshared half edge from node ' int2str(elemp(ielem,nlast)) ' (node ' int2str(nlast) ') on side ' int2str(slast) ' from element ' int2str(ielem) ' written.'])
    364                             [lat,long]=xy2ll((md.x(elemp(ielem,nlast))...
    365                                              +md.x(elemp(ielem,nnext)))/2.,...
    366                                              (md.y(elemp(ielem,nlast))...
    367                                              +md.y(elemp(ielem,nnext)))/2.,-1);
    368                             kline.coords(end+1,:)=[long lat alt];
     373                            kline.coords(end+1,:)=[(md.long(elemp(ielem,nlast))...
     374                                                   +md.long(elemp(ielem,nnext)))/2. ...
     375                                                   (md.lat(elemp(ielem,nlast))...
     376                                                   +md.lat(elemp(ielem,nnext)))/2. alt];
    369377                            nlast=0;
    370378
     
    396404%  all different, so cut through centroid
    397405%                                disp(['element ielem=' int2str(ielem) ' centroid written.'])
    398                                 [lat,long]=xy2ll(sum(md.x(elemp(ielem,:)))/3.,...
    399                                                  sum(md.y(elemp(ielem,:)))/3.,-1);
    400                                 kline.coords(end+1,:)=[long lat alt];
     406                                kline.coords(end+1,:)=[sum(md.long(elemp(ielem,:)))/3. ...
     407                                                       sum(md.lat(elemp(ielem,:)))/3. alt];
    401408                            end
    402409%  one node is in current partition, so cut off other two nodes
     
    412419%  write out midpoint of opposite side
    413420%                        disp(['segment j=' int2str(j) ' internal edge from side ' int2str(slast) ' to side ' int2str(snext) ' from element ' int2str(ielem) ' written.'])
    414                         [lat,long]=xy2ll((md.x(elemp(ielem,snext))...
    415                                          +md.x(elemp(ielem,mod(snext,3)+1)))/2.,...
    416                                          (md.y(elemp(ielem,snext))...
    417                                          +md.y(elemp(ielem,mod(snext,3)+1)))/2.,-1);
    418                         kline.coords(end+1,:)=[long lat alt];
     421                        kline.coords(end+1,:)=[(md.long(elemp(ielem,snext))...
     422                                               +md.long(elemp(ielem,mod(snext,3)+1)))/2. ...
     423                                               (md.lat(elemp(ielem,snext))...
     424                                               +md.lat(elemp(ielem,mod(snext,3)+1)))/2. alt];
    419425                        elast=ielem;
    420426                        nlast=0;
     
    445451                            end
    446452%                            disp(['segment j=' int2str(j) ' unshared half edge on side ' int2str(slast) ' to node ' int2str(elemp(elast,nnext)) ' (node ' int2str(nnext) ') from element ' int2str(elast) ' written.'])
    447                             [lat,long]=xy2ll(md.x(elemp(elast,nnext)),...
    448                                              md.y(elemp(elast,nnext)),-1);
    449                             kline.coords(end+1,:)=[long lat alt];
     453                            kline.coords(end+1,:)=[md.long(elemp(elast,nnext)) ...
     454                                                   md.lat(elemp(elast,nnext)) alt];
    450455                            break
    451456%  if not unshared, advance perimeter list and watch for end
  • issm/trunk/src/m/kml/kml_part_elems.m

    r7132 r7342  
    1111%
    1212%  and the optional input is:
     13%    latsgn        (numeric, +1/-1 for north/south latitude)
    1314%    data          (numeric, element or nodal results data)
    1415%    alt           (numeric, altitude for polygons, default 10000)
     
    4445    if ischar(varargin{iarg})
    4546        if ~isempty(strmatch(varargin{iarg},...
    46                 {'data','alt',...
     47                {'latsgn','data','alt',...
    4748                 'cmin','cmax','cmap','prtplt'},...
    4849                'exact'))
     
    5960    end
    6061    iarg=iarg+2;
     62end
     63
     64if isempty(md.lat)  || ((numel(md.lat) == 1)  && isnan(md.lat)) || ...
     65   isempty(md.long) || ((numel(md.long) == 1) && isnan(md.long))
     66    if     ~exist('latsgn')
     67        error(['Missing ''latsgn'' parameter to calculate missing lat/long data.']);
     68    elseif (abs(latsgn) ~= 1)
     69        error(['Incorrect latsgn=' num2str(latsgn) ' parameter to calculate missing lat/long data.']);
     70    else
     71        display('Converting x/y data to lat/long data.');
     72        [md.lat,md.long]=xy2ll(md.x,md.y,latsgn);
     73    end
    6174end
    6275
     
    186199
    187200            for j=1:size(elem,2)
    188                 [lat,long]=xy2ll(md.x(elem(i,j)),md.y(elem(i,j)),-1);
    189                 kring.coords(j,:)=[long lat alt];
     201                kring.coords(j,:)=[md.long(elem(i,j)) md.lat(elem(i,j)) alt];
    190202            end
    191203            kring.coords(end,:)=kring.coords(1,:);
  • issm/trunk/src/m/kml/kml_part_flagedges.m

    r7132 r7342  
    1111%
    1212%  and the optional input is:
     13%    latsgn        (numeric, +1/-1 for north/south latitude)
    1314%    alt           (numeric, altitude for polygons, default 10000)
    1415%    prtplt        (char, 'off'/'no' for partition edge plot)
     
    4041    if ischar(varargin{iarg})
    4142        if ~isempty(strmatch(varargin{iarg},...
    42                 {'alt','prtplt'},...
     43                {'latsgn','alt','prtplt'},...
    4344                'exact'))
    4445            eval([varargin{iarg} '=varargin{iarg+1};']);
     
    5354end
    5455
     56if isempty(md.lat)  || ((numel(md.lat) == 1)  && isnan(md.lat)) || ...
     57   isempty(md.long) || ((numel(md.long) == 1) && isnan(md.long))
     58    if     ~exist('latsgn')
     59        error(['Missing ''latsgn'' parameter to calculate missing lat/long data.']);
     60    elseif (abs(latsgn) ~= 1)
     61        error(['Incorrect latsgn=' num2str(latsgn) ' parameter to calculate missing lat/long data.']);
     62    else
     63        display('Converting x/y data to lat/long data.');
     64        [md.lat,md.long]=xy2ll(md.x,md.y,latsgn);
     65    end
     66end
     67
    5568if ~exist('alt','var')
    5669    alt=10000;
     
    6174if (~exist('prtplt','var') || strncmpi(prtplt,'on' ,2) || strncmpi(prtplt,'y',1)) && ...
    6275    md.npart
    63     [xseg,yseg]=flagedges(md.elements,md.x,md.y,md.part);
     76    [latseg,lonseg]=flagedges(md.elements,md.lat,md.long,md.part);
    6477    kfold=kml_folder();
    6578    kfold.name      ='Partition Segments';
    6679    kfold.visibility=1;
    6780    kfold.descript  =sprintf('Partitions=%d, Segments=%d',...
    68         md.npart,size(xseg,1));
    69     kfold.feature   ={repmat(kml_placemark(),1,size(xseg,1))};
     81        md.npart,size(latseg,1));
     82    kfold.feature   ={repmat(kml_placemark(),1,size(latseg,1))};
    7083
    7184%  write each segment as a linestring placemark
    7285
    73     disp(['Writing ' num2str(size(xseg,1)) ' partition segments as KML linestrings.']);
    74     for i=1:size(xseg,1)
     86    disp(['Writing ' num2str(size(latseg,1)) ' partition segments as KML linestrings.']);
     87    for i=1:size(latseg,1)
    7588        kplace=kml_placemark();
    7689        kplace.name      =sprintf('Segment %d',i);
     
    8598
    8699        for j=1:2
    87             [lat,long]=xy2ll(xseg(i,j),yseg(i,j),-1);
    88             kline.coords(j,:)=[long lat alt];
     100            kline.coords(j,:)=[lonseg(i,j) latseg(i,j) alt];
    89101        end
    90102
  • issm/trunk/src/m/kml/kml_partitions.m

    r7132 r7342  
    1212%
    1313%  and the optional input is:
     14%    latsgn        (numeric, +1/-1 for north/south latitude)
    1415%    data          (numeric, element or nodal results data)
    1516%    alt           (numeric, altitude for polygons, default 10000)
     
    4546    if ischar(varargin{iarg})
    4647        if ~isempty(strmatch(varargin{iarg},...
    47                 {'data','alt',...
     48                {'latsgn','data','alt',...
    4849                 'cmin','cmax','cmap','prtplt'},...
    4950                'exact'))
     
    6061    end
    6162    iarg=iarg+2;
     63end
     64
     65if isempty(md.lat)  || ((numel(md.lat) == 1)  && isnan(md.lat)) || ...
     66   isempty(md.long) || ((numel(md.long) == 1) && isnan(md.long))
     67    if     ~exist('latsgn')
     68        error(['Missing ''latsgn'' parameter to calculate missing lat/long data.']);
     69    elseif (abs(latsgn) ~= 1)
     70        error(['Incorrect latsgn=' num2str(latsgn) ' parameter to calculate missing lat/long data.']);
     71    else
     72        display('Converting x/y data to lat/long data.');
     73        [md.lat,md.long]=xy2ll(md.x,md.y,latsgn);
     74    end
    6275end
    6376
     
    223236%  if first edge, write out first node
    224237                    if ~elast
    225                         [lat,long]=xy2ll(md.x(edgeper(j,1)),md.y(edgeper(j,1)),-1);
    226                         kring.coords(end+1,:)=[long lat alt];
     238                        kring.coords(end+1,:)=[md.long(edgeper(j,1)) md.lat(edgeper(j,1)) alt];
    227239                    end
    228                     [lat,long]=xy2ll(md.x(edgeper(j,2)),md.y(edgeper(j,2)),-1);
    229                     kring.coords(end+1,:)=[long lat alt];
     240                    kring.coords(end+1,:)=[md.long(edgeper(j,2)) md.lat(edgeper(j,2)) alt];
    230241                    elast=elemper(j);
    231242                    nlast=edgeper(j,2);
     
    314325%  write out first node of first side for half-edge to midpoint
    315326%                                disp(['segment j=' int2str(j) ' unshared half edge from node ' int2str(elemp(ielem,nlast)) ' (node ' int2str(nlast) ') on side ' int2str(slast) ' from element ' int2str(ielem) ' written.'])
    316                                 [lat,long]=xy2ll((md.x(elemp(ielem,nlast))),...
    317                                                  (md.y(elemp(ielem,nlast))),-1);
    318                                 kring.coords(end+1,:)=[long lat alt];
     327                                kring.coords(end+1,:)=[md.long(elemp(ielem,nlast)) ...
     328                                                       md.lat(elemp(ielem,nlast)) alt];
    319329                            end
    320330                            nlast=0;
    321331                           
    322332%  write out midpoint of first side
    323                             [lat,long]=xy2ll((md.x(elemp(ielem,slast))...
    324                                              +md.x(elemp(ielem,mod(slast,3)+1)))/2.,...
    325                                              (md.y(elemp(ielem,slast))...
    326                                              +md.y(elemp(ielem,mod(slast,3)+1)))/2.,-1);
    327                             kring.coords(end+1,:)=[long lat alt];
     333                            kring.coords(end+1,:)=[(md.long(elemp(ielem,slast))...
     334                                                   +md.long(elemp(ielem,mod(slast,3)+1)))/2. ...
     335                                                   (md.lat(elemp(ielem,slast))...
     336                                                   +md.lat(elemp(ielem,mod(slast,3)+1)))/2. alt];
    328337                        end
    329338
     
    364373%  write out half-edge from current node to midpoint of unshared side
    365374%                            disp(['segment j=' int2str(j) ' unshared half edge from node ' int2str(elemp(ielem,nlast)) ' (node ' int2str(nlast) ') on side ' int2str(slast) ' from element ' int2str(ielem) ' written.'])
    366                             [lat,long]=xy2ll((md.x(elemp(ielem,nlast))...
    367                                              +md.x(elemp(ielem,nnext)))/2.,...
    368                                              (md.y(elemp(ielem,nlast))...
    369                                              +md.y(elemp(ielem,nnext)))/2.,-1);
    370                             kring.coords(end+1,:)=[long lat alt];
     375                            kring.coords(end+1,:)=[(md.long(elemp(ielem,nlast))...
     376                                                   +md.long(elemp(ielem,nnext)))/2. ...
     377                                                   (md.lat(elemp(ielem,nlast))...
     378                                                   +md.lat(elemp(ielem,nnext)))/2. alt];
    371379                            nlast=0;
    372380
     
    398406%  all different, so cut through centroid
    399407%                                disp(['element ielem=' int2str(ielem) ' centroid written.'])
    400                                 [lat,long]=xy2ll(sum(md.x(elemp(ielem,:)))/3.,...
    401                                                  sum(md.y(elemp(ielem,:)))/3.,-1);
    402                                 kring.coords(end+1,:)=[long lat alt];
     408                                kring.coords(end+1,:)=[sum(md.long(elemp(ielem,:)))/3. ...
     409                                                       sum(md.lat(elemp(ielem,:)))/3. alt];
    403410                            end
    404411%  one node is in current partition, so cut off other two nodes
     
    414421%  write out midpoint of opposite side
    415422%                        disp(['segment j=' int2str(j) ' internal edge from side ' int2str(slast) ' to side ' int2str(snext) ' from element ' int2str(ielem) ' written.'])
    416                         [lat,long]=xy2ll((md.x(elemp(ielem,snext))...
    417                                          +md.x(elemp(ielem,mod(snext,3)+1)))/2.,...
    418                                          (md.y(elemp(ielem,snext))...
    419                                          +md.y(elemp(ielem,mod(snext,3)+1)))/2.,-1);
    420                         kring.coords(end+1,:)=[long lat alt];
     423                        kring.coords(end+1,:)=[(md.long(elemp(ielem,snext))...
     424                                               +md.long(elemp(ielem,mod(snext,3)+1)))/2. ...
     425                                               (md.lat(elemp(ielem,snext))...
     426                                               +md.lat(elemp(ielem,mod(snext,3)+1)))/2. alt];
    421427                        elast=ielem;
    422428                        nlast=0;
     
    447453                            end
    448454%                            disp(['segment j=' int2str(j) ' unshared half edge on side ' int2str(slast) ' to node ' int2str(elemp(elast,nnext)) ' (node ' int2str(nnext) ') from element ' int2str(elast) ' written.'])
    449                             [lat,long]=xy2ll(md.x(elemp(elast,nnext)),...
    450                                              md.y(elemp(elast,nnext)),-1);
    451                             kring.coords(end+1,:)=[long lat alt];
     455                            kring.coords(end+1,:)=[md.long(elemp(elast,nnext)) ...
     456                                                   md.lat(elemp(elast,nnext)) alt];
    452457                            break
    453458%  if not unshared, advance perimeter list and watch for end
  • issm/trunk/src/m/kml/kml_unsh_edges.m

    r7132 r7342  
    1111%
    1212%  and the optional input is:
     13%    latsgn        (numeric, +1/-1 for north/south latitude)
    1314%    alt           (numeric, altitude for polygons, default 10000)
    1415%    prtplt        (char, 'off'/'no' for partition edge plot)
     
    4041    if ischar(varargin{iarg})
    4142        if ~isempty(strmatch(varargin{iarg},...
    42                 {'alt','prtplt'},...
     43                {'latsgn','alt','prtplt'},...
    4344                'exact'))
    4445            eval([varargin{iarg} '=varargin{iarg+1};']);
     
    5152    end
    5253    iarg=iarg+2;
     54end
     55
     56if isempty(md.lat)  || ((numel(md.lat) == 1)  && isnan(md.lat)) || ...
     57   isempty(md.long) || ((numel(md.long) == 1) && isnan(md.long))
     58    if     ~exist('latsgn')
     59        error(['Missing ''latsgn'' parameter to calculate missing lat/long data.']);
     60    elseif (abs(latsgn) ~= 1)
     61        error(['Incorrect latsgn=' num2str(latsgn) ' parameter to calculate missing lat/long data.']);
     62    else
     63        display('Converting x/y data to lat/long data.');
     64        [md.lat,md.long]=xy2ll(md.x,md.y,latsgn);
     65    end
    5366end
    5467
     
    91104
    92105        for j=1:2
    93             [lat,long]=xy2ll(md.x(edgeuns(i,j)),md.y(edgeuns(i,j)),-1);
    94             kline.coords(j,:)=[long lat alt];
     106            kline.coords(j,:)=[md.long(edgeuns(i,j)) md.lat(edgeuns(i,j)) alt];
    95107        end
    96108
Note: See TracChangeset for help on using the changeset viewer.