{"id":257,"date":"2009-04-24T15:29:17","date_gmt":"2009-04-24T19:29:17","guid":{"rendered":"https:\/\/blogs.mathworks.com\/steve\/2009\/04\/24\/continental-divide-1-intro\/"},"modified":"2019-10-28T15:30:25","modified_gmt":"2019-10-28T19:30:25","slug":"continental-divide-1-intro","status":"publish","type":"post","link":"https:\/\/blogs.mathworks.com\/steve\/2009\/04\/24\/continental-divide-1-intro\/","title":{"rendered":"Locating the US continental divide,  part 1 &#8211; Introduction"},"content":{"rendered":"<div xmlns:mwsh=\"https:\/\/www.mathworks.com\/namespace\/mcode\/v1\/syntaxhighlight.dtd\" class=\"content\">\r\n   <p>Today I'm introducing a series on computing the location of the US continental divide. (I was inspired to tackle this topic\r\n      by Brian Hayes' <a href=\"http:\/\/bit-player.org\/2009\/long-division\">blog post<\/a> on the divide; thanks very much to <a href=\"https:\/\/blogs.mathworks.com\/loren\/2009\/04\/06\/palindrome-numbers\/\">Mike<\/a> and <a href=\"https:\/\/www.mathworks.com\/matlabcentral\/fileexchange\/authors\/3050\">Ned<\/a> for sending me the link.)\r\n   <\/p>\r\n   <p>The series will start with importing global elevation data for Earth, and it will finish with this visualization of the Atlantic\r\n      and Pacific catchment basins for the continental US:\r\n   <\/p>\r\n   <p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/images\/steve\/2009\/continental_divide_part_7_all_steps_01.jpg\"> <\/p>\r\n   <p>My regular blog readers might be happy to know that this time I've planned and written out the whole series in advance.  See\r\n      below for the series summary.\r\n   <\/p>\r\n   <p>In this first post, I'll tackle data import and display.<\/p>\r\n   <p>The data for this project comes from the <a href=\"http:\/\/www.ngdc.noaa.gov\/mgg\/topo\/globe.html\">Global Land One-km Base Elevation Project<\/a>, available from the National Geophysical Data Center. The global elevation data set is available <a href=\"http:\/\/www.ngdc.noaa.gov\/mgg\/topo\/gltiles.html\">online<\/a> in the form of 16 tiles, labeled A through P. <a href=\"http:\/\/www.ngdc.noaa.gov\/mgg\/topo\/DATATILES\/elev\/e10g.gz\">Tile E<\/a> and and <a href=\"http:\/\/www.ngdc.noaa.gov\/mgg\/topo\/DATATILES\/elev\/f10g.gz\">tile F<\/a> cover the continental United States, Central America, and portions of Canada and South America.\r\n   <\/p>\r\n   <p>After you've downloaded and uncompressed the files, you have to figure out how to import them.  As it turns out, these files are\r\n      not in a structured format, such as TIFF or HDF, that can be read automatically. Instead, you need to poke around the data\r\n      documentation on the web to find out how to read the files. This is fairly common with scientific data sources. The documentation\r\n      for this data set includes a section called <a href=\"http:\/\/www.ngdc.noaa.gov\/mgg\/topo\/report\/s11\/s11.html\">\"Data Format &amp; Importing GLOBE Data.\"<\/a> By perusing this section I <a href=\"http:\/\/www.ngdc.noaa.gov\/mgg\/topo\/report\/s11\/s11D.html\">found<\/a> that the files I downloaded contain 16-bit signed integers organized in a raster of 6000 rows and 10800 columns, stored by\r\n      row.  There are no header bytes, and the integers are stored using little-endian byte order.\r\n   <\/p>\r\n   <p>The appropriate MATLAB function to use is <tt>multibandread<\/tt>.\r\n   <\/p><pre style=\"background: #F9F7F3; padding: 10px; border: 1px solid rgb(200,200,200)\">data_size = [6000 10800 1];  <span style=\"color: #228B22\">% The data has 1 band.<\/span>\r\nprecision = <span style=\"color: #A020F0\">'int16=&gt;int16'<\/span>;  <span style=\"color: #228B22\">% Read 16-bit signed ints into a int16 array.<\/span>\r\nheader_bytes = 0;\r\ninterleave = <span style=\"color: #A020F0\">'bsq'<\/span>;          <span style=\"color: #228B22\">% Band sequential. Not critical for 1 band.<\/span>\r\nbyte_order = <span style=\"color: #A020F0\">'ieee-le'<\/span>;\r\n\r\nE = multibandread(<span style=\"color: #A020F0\">'e10g'<\/span>, data_size, precision, header_bytes, <span style=\"color: #0000FF\">...<\/span>\r\n    interleave, byte_order);\r\nF = multibandread(<span style=\"color: #A020F0\">'f10g'<\/span>, data_size, precision, header_bytes, <span style=\"color: #0000FF\">...<\/span>\r\n    interleave, byte_order);\r\n\r\ndem = [E, F];  <span style=\"color: #228B22\">% dem stands for \"Digital Elevation Model\"<\/span><\/pre><p>Next I'll use <tt>imshow<\/tt>, using some optional inputs, to display the digital elevation model as an image.\r\n   <\/p><pre style=\"background: #F9F7F3; padding: 10px; border: 1px solid rgb(200,200,200)\">imshow(dem, [], <span style=\"color: #A020F0\">'InitialMagnification'<\/span>, <span style=\"color: #A020F0\">'fit'<\/span>)<\/pre><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/images\/steve\/2009\/continental_divide_introduction_01.jpg\"> <p>About those optional inputs: When displaying gridded data as an image, it is often useful to control the black-to-white display\r\n      range.  If you supply a vector as the second input to <tt>imshow<\/tt>, like this:\r\n   <\/p><pre>   imshow(dem, [a b])<\/pre><p>then <tt>imshow<\/tt> uses <tt>[a b]<\/tt> as the image display range. A value of <tt>a<\/tt> gets displayed as black, a value of <tt>b<\/tt> gets displayed as white, and values in-between are displayed as shades of gray.\r\n   <\/p>\r\n   <p>For the special case where the second input is empty:<\/p><pre>   imshow(dem, [])<\/pre><p><tt>imshow<\/tt> uses the data range as the display range. That is, <tt>imshow(dem, [])<\/tt> is equivalent to <tt>imshow(dem, [min(dem(:)), max(dem(:))])<\/tt>.\r\n   <\/p>\r\n   <p>The other optional inputs, <tt>'InitialMagnification', 'fit'<\/tt>, tell <tt>imshow<\/tt> to magnify or shrink the image display as needed to fit nicely within the current figure window. I'm using that option here\r\n      so that my image displays will fit in the column for this blog post.\r\n   <\/p>\r\n   <p>For this data, the autoscaling provided by the <tt>imshow(dem, [])<\/tt> syntax has given us an image display that is too dark, particularly on the eastern part of the continent.  Let's set a white\r\n      level that's lower than the data maximum; that will have the effect of brightening the image.\r\n   <\/p><pre style=\"background: #F9F7F3; padding: 10px; border: 1px solid rgb(200,200,200)\">min(dem(:))<\/pre><pre style=\"font-style:oblique\">\r\nans =\r\n\r\n   -500\r\n\r\n<\/pre><pre style=\"background: #F9F7F3; padding: 10px; border: 1px solid rgb(200,200,200)\">max(dem(:))<\/pre><pre style=\"font-style:oblique\">\r\nans =\r\n\r\n   6085\r\n\r\n<\/pre><pre style=\"background: #F9F7F3; padding: 10px; border: 1px solid rgb(200,200,200)\">display_range = [-500 3000];\r\nimshow(dem, display_range, <span style=\"color: #A020F0\">'InitialMagnification'<\/span>, <span style=\"color: #A020F0\">'fit'<\/span>)<\/pre><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/images\/steve\/2009\/continental_divide_introduction_02.jpg\"> <p>Next I'll crop the image. The Image Processing Toolbox has interactive cropping tools (<tt>imcrop<\/tt>, <tt>imtool<\/tt>), but I can't use those here.\r\n   <\/p><pre style=\"background: #F9F7F3; padding: 10px; border: 1px solid rgb(200,200,200)\">dem_cropped = dem(1:4000, 6000:14500);\r\nimshow(dem_cropped, display_range, <span style=\"color: #A020F0\">'InitialMagnification'<\/span>, <span style=\"color: #A020F0\">'fit'<\/span>)<\/pre><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/images\/steve\/2009\/continental_divide_introduction_03.jpg\"> <p>Finally, I'll save <tt>dem_cropped<\/tt> to a MAT-file for use in the rest of the series.\r\n   <\/p><pre style=\"background: #F9F7F3; padding: 10px; border: 1px solid rgb(200,200,200)\">save <span style=\"color: #A020F0\">continental_divide<\/span> <span style=\"color: #A020F0\">dem_cropped<\/span><\/pre><p><i>About this Series<\/i><\/p>\r\n   <p><a href=\"https:\/\/blogs.mathworks.com\/steve\/category\/continental-divide\/\">This series<\/a> explores the problem of computing the location of the continental divide for the United States.  The divide separates the\r\n      Atlantic and Pacific Ocean catchment basins for the North American continent.\r\n   <\/p>\r\n   <p>As an algorithm development problem, computing the divide lets us explore aspects of data import and visualization, manipulating\r\n      binary image masks, label matrices, regional minima, and the watershed transform.\r\n   <\/p>\r\n   <div>\r\n      <ul>\r\n         <li><a href=\"https:\/\/blogs.mathworks.com\/steve\/2009\/04\/24\/continental-divide-1-intro\/\">Part 1<\/a> - Introduction. Data import and display. <tt>multibandread<\/tt>, <tt>imshow<\/tt>.\r\n         <\/li>\r\n      <\/ul>\r\n   <\/div>\r\n   <div>\r\n      <ul>\r\n         <li><a href=\"https:\/\/blogs.mathworks.com\/steve\/2009\/05\/01\/continental-divide-2-watershed\/\">Part 2<\/a> - Watershed transform. <tt>watershed<\/tt>, <tt>label2rgb<\/tt>.\r\n         <\/li>\r\n      <\/ul>\r\n   <\/div>\r\n   <div>\r\n      <ul>\r\n         <li><a href=\"https:\/\/blogs.mathworks.com\/steve\/2009\/05\/08\/continental-divide-3-regmin\/\">Part 3<\/a> - Regional minima. <tt>imerode<\/tt>, <tt>imregionalmin<\/tt>.\r\n         <\/li>\r\n      <\/ul>\r\n   <\/div>\r\n   <div>\r\n      <ul>\r\n         <li><a href=\"https:\/\/blogs.mathworks.com\/steve\/2009\/05\/15\/continental-divide-4-oceans\/\">Part 4<\/a> - Ocean masks. binary image manipulation, <tt>bwselect<\/tt>.\r\n         <\/li>\r\n      <\/ul>\r\n   <\/div>\r\n   <div>\r\n      <ul>\r\n         <li><a href=\"https:\/\/blogs.mathworks.com\/steve\/2009\/05\/22\/continental-divide-5-imposemin\/\">Part 5<\/a> - Minima imposition. <tt>imimposemin<\/tt>.\r\n         <\/li>\r\n\r\n\r\n\r\n      <\/ul>\r\n   <\/div>\r\n   <div>\r\n      <ul>\r\n         <li><a href=\"https:\/\/blogs.mathworks.com\/steve\/2009\/05\/29\/continental-divide-6-watershed\/\">Part 6<\/a> - Computing and visualizing the divide. <tt>watershed<\/tt>, <tt>label2rgb<\/tt>, <tt>bwboundaries<\/tt>.\r\n         <\/li>\r\n      <\/ul>\r\n   <\/div>\r\n   <div>\r\n      <ul>\r\n         <li><a href=\"https:\/\/blogs.mathworks.com\/steve\/2009\/06\/05\/continental-divide-7-all-steps\/\">Part 7<\/a> - Putting it all together. One script that does everything, from data import through computation and visualization\r\n            of the divide.\r\n         <\/li>\r\n      <\/ul>\r\n   <\/div>\r\n   <p>Data credit: <i>GLOBE Task Team and others (Hastings, David A., Paula K. Dunbar, Gerald M. Elphingstone, Mark Bootz, Hiroshi Murakami, Hiroshi\r\n         Maruyama, Hiroshi Masaharu, Peter Holland, John Payne, Nevin A. Bryant, Thomas L. Logan, J.-P. Muller, Gunter Schreier, and\r\n         John S. MacDonald), eds., 1999. The Global Land One-kilometer Base Elevation (GLOBE) Digital Elevation Model, Version 1.0.\r\n         National Oceanic and Atmospheric Administration, National Geophysical Data Center, 325 Broadway, Boulder, Colorado 80305-3328,\r\n         U.S.A. Digital data base on the World Wide Web (URL: <a href=\"http:\/\/www.ngdc.noaa.gov\/mgg\/topo\/globe.html\">http:\/\/www.ngdc.noaa.gov\/mgg\/topo\/globe.html<\/a>) and CD-ROMs.<\/i><\/p><script language=\"JavaScript\">\r\n<!--\r\n\r\n    function grabCode_329814deadaf46bbabf5a58ad28d0773() {\r\n        \/\/ Remember the title so we can use it in the new page\r\n        title = document.title;\r\n\r\n        \/\/ Break up these strings so that their presence\r\n        \/\/ in the Javascript doesn't mess up the search for\r\n        \/\/ the MATLAB code.\r\n        t1='329814deadaf46bbabf5a58ad28d0773 ' + '##### ' + 'SOURCE BEGIN' + ' #####';\r\n        t2='##### ' + 'SOURCE END' + ' #####' + ' 329814deadaf46bbabf5a58ad28d0773';\r\n    \r\n        b=document.getElementsByTagName('body')[0];\r\n        i1=b.innerHTML.indexOf(t1)+t1.length;\r\n        i2=b.innerHTML.indexOf(t2);\r\n \r\n        code_string = b.innerHTML.substring(i1, i2);\r\n        code_string = code_string.replace(\/REPLACE_WITH_DASH_DASH\/g,'--');\r\n\r\n        \/\/ Use \/x3C\/g instead of the less-than character to avoid errors \r\n        \/\/ in the XML parser.\r\n        \/\/ Use '\\x26#60;' instead of '<' so that the XML parser\r\n        \/\/ doesn't go ahead and substitute the less-than character. \r\n        code_string = code_string.replace(\/\\x3C\/g, '\\x26#60;');\r\n\r\n        author = 'Steve Eddins';\r\n        copyright = 'Copyright 2009 The MathWorks, Inc.';\r\n\r\n        w = window.open();\r\n        d = w.document;\r\n        d.write('<pre>\\n');\r\n        d.write(code_string);\r\n\r\n        \/\/ Add author and copyright lines at the bottom if specified.\r\n        if ((author.length > 0) || (copyright.length > 0)) {\r\n            d.writeln('');\r\n            d.writeln('%%');\r\n            if (author.length > 0) {\r\n                d.writeln('% _' + author + '_');\r\n            }\r\n            if (copyright.length > 0) {\r\n                d.writeln('% _' + copyright + '_');\r\n            }\r\n        }\r\n\r\n        d.write('<\/pre>\\n');\r\n      \r\n      d.title = title + ' (MATLAB code)';\r\n      d.close();\r\n      }   \r\n      \r\n-->\r\n<\/script><p style=\"text-align: right; font-size: xx-small; font-weight:lighter;   font-style: italic; color: gray\"><br><a href=\"javascript:grabCode_329814deadaf46bbabf5a58ad28d0773()\"><span style=\"font-size: x-small;        font-style: italic;\">Get \r\n            the MATLAB code \r\n            <noscript>(requires JavaScript)<\/noscript><\/span><\/a><br><br>\r\n      Published with MATLAB&reg; 7.8<br><\/p>\r\n<\/div>\r\n<!--\r\n329814deadaf46bbabf5a58ad28d0773 ##### SOURCE BEGIN #####\r\n%%\r\n% Today I'm introducing a series on computing the location of the US\r\n% continental divide. (I was inspired to tackle this topic by Brian Hayes'\r\n% <http:\/\/bit-player.org\/2009\/long-division blog post> on the divide; thanks very much to\r\n% <https:\/\/blogs.mathworks.com\/loren\/2009\/04\/06\/palindrome-numbers\/ Mike>\r\n% for sending me the link.)\r\n%\r\n% The series will start with importing global elevation data for Earth, and\r\n% it will finish with this visualization of the Atlantic and Pacific catchment\r\n% basins for the continental US:\r\n%\r\n% <<https:\/\/blogs.mathworks.com\/images\/steve\/2009\/continental_divide_part_7_all_steps_01.jpg>>\r\n%\r\n% My regular blog readers might be happy to know that this time I've\r\n% planned and written out the whole series in advance.  See below for\r\n% the series summary.\r\n%\r\n% In this first post, I'll tackle data import, and display.\r\n%\r\n% The data for this project comes from the\r\n% <http:\/\/www.ngdc.noaa.gov\/mgg\/topo\/globe.html Global Land One-km Base \r\n% Elevation Project>, available from the National Geophysical Data Center.\r\n% The global elevation data set is available\r\n% <http:\/\/www.ngdc.noaa.gov\/mgg\/topo\/gltiles.html online> in the form of 16\r\n% tiles, labeled A through P.\r\n% <http:\/\/www.ngdc.noaa.gov\/mgg\/topo\/DATATILES\/elev\/e10g.gz Tile E> and and\r\n% <http:\/\/www.ngdc.noaa.gov\/mgg\/topo\/DATATILES\/elev\/f10g.gz tile F> cover\r\n% the continental United States, Central America, and portions of Canada\r\n% and South America. \r\n%\r\n% After you've downloaded and uncompressed the files, you have to figure\r\n% out to import them.  As it turns out, these files are not in a structured\r\n% format, such as TIFF or HDF, that can be read automatically. Instead, you\r\n% need to poke around the data documentation on the web to find out how to\r\n% read the files. This is fairly common with scientific data sources. The\r\n% documentation for this data set includes a section called\r\n% <http:\/\/www.ngdc.noaa.gov\/mgg\/topo\/report\/s11\/s11.html \"Data Format &\r\n% Importing GLOBE Data.\"> By perusing this section I \r\n% <http:\/\/www.ngdc.noaa.gov\/mgg\/topo\/report\/s11\/s11D.html \r\n% found> that the files I\r\n% downloaded contain 16-bit signed integers organized in a raster of 6000\r\n% rows and 10800 columns, stored by row.  There are no header bytes, and\r\n% the integers are stored using little-endian byte order.\r\n%\r\n% The appropriate MATLAB function to use is |multibandread|.\r\n\r\ndata_size = [6000 10800 1];  % The data has 1 band.\r\nprecision = 'int16=>int16';  % Read 16-bit signed ints into a int16 array.\r\nheader_bytes = 0;\r\ninterleave = 'bsq';          % Band sequential. Not critical for 1 band.\r\nbyte_order = 'ieee-le';\r\n\r\nE = multibandread('e10g', data_size, precision, header_bytes, ...\r\n    interleave, byte_order);\r\nF = multibandread('f10g', data_size, precision, header_bytes, ...\r\n    interleave, byte_order);\r\n\r\ndem = [E, F];  % dem stands for \"Digital Elevation Model\"\r\n\r\n%%\r\n% Next I'll use |imshow|, using some optional inputs, to display the\r\n% digital elevation model as an image.  \r\n\r\nimshow(dem, [], 'InitialMagnification', 'fit')\r\n\r\n%%\r\n% About those optional inputs: When displaying gridded data as an image, it\r\n% is often useful to control the black-to-white display range.  If you\r\n% supply a vector as the second input to |imshow|, like this:\r\n%\r\n%     imshow(dem, [a b])\r\n%\r\n% then |imshow| uses |[a b]| as the image display range. A value of |a|\r\n% gets displayed as black, a value of |b| gets displayed as white, and\r\n% values in-between are displayed as shades of gray.\r\n%\r\n% For the special case where the second input is empty:\r\n%\r\n%     imshow(dem, [])\r\n%\r\n% |imshow| uses the data range as the display range. That is, |imshow(dem,\r\n% [])| is equivalent to |imshow(dem, [min(dem(:)), max(dem(:))])|.\r\n%\r\n% The other optional inputs, |'InitialMagnification', 'fit'|, tell |imshow|\r\n% to magnify or shrink the image display as needed to fit nicely within the\r\n% current figure window. I'm using that option here so that my image\r\n% displays will fit in the column for this blog post.\r\n%\r\n% For this data, the autoscaling provided by the |imshow(dem, [])| syntax\r\n% has given us an image display that is too dark, particularly on the\r\n% eastern part of the continent.  Let's set a black level that's lower than\r\n% the data minimum; that will have the effect of brightening the image.\r\n\r\nmin(dem(:))\r\n\r\n%%\r\n\r\nmax(dem(:))\r\n\r\n%%\r\n\r\ndisplay_range = [-500 3000];\r\nimshow(dem, display_range, 'InitialMagnification', 'fit')\r\n%%\r\n% Next I'll crop the image. The Image Processing Toolbox has interactive\r\n% cropping tools (|imcrop|, |imtool|), but I can't use those here.\r\n\r\ndem_cropped = dem(1:4000, 6000:14500);\r\nimshow(dem_cropped, display_range, 'InitialMagnification', 'fit')\r\n\r\n%%\r\n% Finally, I'll save |dem_cropped| to a MAT-file for use in the rest of the\r\n% series.\r\n\r\nsave continental_divide dem_cropped\r\n\r\n%%\r\n% _About this Series_ \r\n%\r\n% <https:\/\/blogs.mathworks.com\/steve\/category\/continental-divide\/ This\r\n% series> explores the problem of computing the location of the \r\n% continental divide for the United States.  The divide separates the\r\n% Atlantic and Pacific Ocean catchment basins for the North American\r\n% continent.\r\n%\r\n% As an algorithm development problem, computing the divide lets us\r\n% explore aspects of data import and visualization, manipulating binary\r\n% image masks, label matrices, regional minima, and the watershed\r\n% transform.\r\n%\r\n% * Part 1 - Introduction. Data import and display. |multibandread|,\r\n% |imshow|. \r\n%\r\n% * Part 2 - Watershed transform. |watershed|, |label2rgb|.\r\n%\r\n% * Part 3 - Regional minima. |imerode|, |imregionalmin|.\r\n%\r\n% * Part 4 - Ocean masks. binary image manipulation, |bwselect|.\r\n%\r\n% * Part 5 - Minima imposition. |imimposemin|.\r\n%\r\n% * Part 6 - Computing and visualizing the divide. |watershed|,\r\n% |label2rgb|, |bwboundaries|. \r\n%\r\n% * Part 7 - Putting it all together. One script that does everything, from\r\n% data import through computation and visualization of the divide.\r\n%\r\n% Data credit: _GLOBE Task Team and others (Hastings, David A., Paula K.\r\n% Dunbar, Gerald M. Elphingstone, Mark Bootz, Hiroshi Murakami, Hiroshi\r\n% Maruyama, Hiroshi Masaharu, Peter Holland, John Payne, Nevin A. Bryant,\r\n% Thomas L. Logan, J.-P. Muller, Gunter Schreier, and John S. MacDonald),\r\n% eds., 1999. The Global Land One-kilometer Base Elevation (GLOBE) Digital\r\n% Elevation Model, Version 1.0. National Oceanic and Atmospheric\r\n% Administration, National Geophysical Data Center, 325 Broadway, Boulder,\r\n% Colorado 80305-3328, U.S.A. Digital data base on the World Wide Web (URL:\r\n% http:\/\/www.ngdc.noaa.gov\/mgg\/topo\/globe.html) and CD-ROMs._\r\n\r\n##### SOURCE END ##### 329814deadaf46bbabf5a58ad28d0773\r\n-->","protected":false},"excerpt":{"rendered":"<p>\r\n   Today I'm introducing a series on computing the location of the US continental divide. (I was inspired to tackle this topic\r\n      by Brian Hayes' blog post on the divide; thanks very much to... <a class=\"read-more\" href=\"https:\/\/blogs.mathworks.com\/steve\/2009\/04\/24\/continental-divide-1-intro\/\">read more >><\/a><\/p>","protected":false},"author":42,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[19],"tags":[36,122,380,535,553],"_links":{"self":[{"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/posts\/257"}],"collection":[{"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/users\/42"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/comments?post=257"}],"version-history":[{"count":1,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/posts\/257\/revisions"}],"predecessor-version":[{"id":3625,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/posts\/257\/revisions\/3625"}],"wp:attachment":[{"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/media?parent=257"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/categories?post=257"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/tags?post=257"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}