{"id":3451,"date":"2021-11-04T15:35:15","date_gmt":"2021-11-04T02:35:15","guid":{"rendered":"http:\/\/blogs.lincoln.ac.nz\/gis\/?p=3451"},"modified":"2023-05-07T02:48:25","modified_gmt":"2023-05-07T02:48:25","slug":"the-return-of-deer-a","status":"publish","type":"post","link":"https:\/\/blogs.lincoln.ac.nz\/gis\/the-return-of-deer-a\/","title":{"rendered":"The Return of Deer A"},"content":{"rendered":"<p><em>We follow up a previous post and attempt to clean up a spatial mess of our own creation<\/em><\/p>\n<p>Previously, we looked at a script that <a href=\"http:\/\/blogs.lincoln.ac.nz\/gis\/near-and-deer\/\" target=\"_blank\" rel=\"noopener noreferrer\">calculates distances between deer locations<\/a>.\u00a0 Things were going along swimmingly until I realised that I hadn&#8217;t quite done what was asked.\u00a0 That knock on my door was Deer A, just wanting to remind me:<\/p>\n<p><a href=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/Run_7394b7ae9f95e7688316de97bea08025.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3474\" src=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/Run_7394b7ae9f95e7688316de97bea08025.jpg\" alt=\"\" width=\"240\" height=\"180\" \/><\/a><\/p>\n<p>I&#8217;m currently in therapy.<\/p>\n<p>As a quick reminder, we&#8217;ve got a dataset of GPS locations for an individual deer over a 50-day period.<\/p>\n<p><a href=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/PointsOnMap.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3431\" src=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/PointsOnMap.jpg\" alt=\"\" width=\"1624\" height=\"879\" srcset=\"https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/PointsOnMap.jpg 1624w, https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/PointsOnMap-300x162.jpg 300w, https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/PointsOnMap-1024x554.jpg 1024w, https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/PointsOnMap-768x416.jpg 768w, https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/PointsOnMap-1536x831.jpg 1536w\" sizes=\"auto, (max-width: 1624px) 100vw, 1624px\" \/><\/a><\/p>\n<p>Using 2-day sliding windows, what&#8217;s needed is to calculate distances from the location at the start of each sliding time window to all the other locations within that window.\u00a0 My error first time around was that I set up these sliding windows as:<\/p>\n<ul>\n<li>window 1 = day 1 and 2<\/li>\n<li>window 2 = day 3 and 4<\/li>\n<li>etc<\/li>\n<\/ul>\n<p>whereas what was needed was:<\/p>\n<ul>\n<li>window 1 = day 1 and 2<\/li>\n<li>window 2 = day 2 and 3<\/li>\n<li>etc<\/li>\n<\/ul>\n<p>(There are good reasons for this&#8230;but I won&#8217;t elaborate here.)<\/p>\n<p>At first, crestfallen, I thought this was going to be a(nother) nightmare but, happily, it turned out to not be a huge deal.<\/p>\n<p>You&#8217;ll recall that one of the issues with the workflow was that\u00a0when working with a layer with selected features, the\u00a0Near tool sets all non-selected feature distances to -1.\u00a0 In the first go, I handled this by writing the results of each iteration to a new feature class, building it up as the while loop runs.<\/p>\n<p>That issue hasn&#8217;t gone away but it&#8217;s slightly more complicated in that I&#8217;m now going to have overlapping distances.\u00a0 What I mean is that each point (except for the first day) will be in two different sliding windows, so I need to somehow craft this so I don&#8217;t end up overwriting the distances from the previous window.\u00a0 I&#8217;m envisioning that in the end, my output table will need to have two NEAR_DIST fields, one for each sliding window.\u00a0 \u00a0Make sense?<\/p>\n<p>I&#8217;m pretty happy with the guts of my first script &#8211;\u00a0but there are some issues, particularly:<\/p>\n<ul>\n<li>My first version used the Window attribute\u00a0 to make selections on my two input layers.\u00a0 That&#8217;s not going to work this time &#8211; I&#8217;ll need to recast that attribute so that it groups each day together &#8211; a window should now be the starting day and the one that follows (day and day + 1).\u00a0 This also means I&#8217;m going to need two separate\u00a0whereClauses &#8211; one for the first day layer and another to select the windows (day and day + 1) from all the records.\u00a0 Let&#8217;s call this <strong>the selection problem.<\/strong><\/li>\n<li>With the overlapping days I need some way to keep a copy of the calculated distances before they get written over in the next iteration.\u00a0 Is that an output layer for each window?\u00a0 Or maybe some smaller number, at least two?\u00a0 Let&#8217;s call this <strong>the output problem<\/strong><\/li>\n<\/ul>\n<p><strong>The Selection Problem<\/strong><\/p>\n<p>First bit here is to group my data not by window but by day.\u00a0 I was just about to bite the bullet and start to do this manually, but Sara, from ERST607 had a few spare moments (ha!) and whipped up a Python script to do this (yes, we&#8217;re getting her some help&#8230;).\u00a0 Thanks Sara!\u00a0 This was a nifty script that used Python&#8217;s <a href=\"https:\/\/docs.python.org\/3\/library\/datetime.html\" target=\"_blank\" rel=\"noopener noreferrer\">datetime <\/a>library to do some grouping and added in a day counter attribute called &#8220;Day_id&#8221;.\u00a0 This did a great job of setting up a layer which could be used for this script.\u00a0 Below are my two input layers:<\/p>\n<p><a href=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/NewDeer2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3454\" src=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/NewDeer2.jpg\" alt=\"\" width=\"1266\" height=\"848\" srcset=\"https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/NewDeer2.jpg 1266w, https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/NewDeer2-300x201.jpg 300w, https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/NewDeer2-1024x686.jpg 1024w, https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/NewDeer2-768x514.jpg 768w, https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/NewDeer2-330x220.jpg 330w\" sizes=\"auto, (max-width: 1266px) 100vw, 1266px\" \/><\/a><\/p>\n<p>You can see the Day_id attribute for each first day (left) and each window (right).\u00a0 I&#8217;ll use that to my advantage in making rolling selections.<\/p>\n<p>Ivan from\u00a0310\u00a0also did a bit of work with pivot tables that helped the cause.\u00a0 He&#8217;s currently in therapy, too.<\/p>\n<p>In the original version of this script I set up a whereClause:<\/p>\n<p><a href=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/whereclause.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3455\" src=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/whereclause.jpg\" alt=\"\" width=\"402\" height=\"21\" srcset=\"https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/whereclause.jpg 402w, https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/whereclause-300x16.jpg 300w\" sizes=\"auto, (max-width: 402px) 100vw, 402px\" \/><\/a><\/p>\n<p>(In this syntax, &#8220;count&#8221; gets inserted into the curly brackets, helpful as it changes every iteration.)<\/p>\n<p>This was then used twice to select the right records in each layer for Near:<\/p>\n<p><a href=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/SbyA1a.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3457\" src=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/SbyA1a.jpg\" alt=\"\" width=\"666\" height=\"43\" srcset=\"https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/SbyA1a.jpg 666w, https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/SbyA1a-300x19.jpg 300w\" sizes=\"auto, (max-width: 666px) 100vw, 666px\" \/><\/a><\/p>\n<p>That&#8217;s not going to work here as I need to select the Day_id as well as Day_id + 1 in the inputFC.\u00a0 I can use my count variable to make this work in a new version with two whereClauses:<\/p>\n<p><a href=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/whereClauses.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3458\" src=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/whereClauses.jpg\" alt=\"\" width=\"781\" height=\"41\" srcset=\"https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/whereClauses.jpg 781w, https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/whereClauses-300x16.jpg 300w, https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/whereClauses-768x40.jpg 768w\" sizes=\"auto, (max-width: 781px) 100vw, 781px\" \/><\/a><\/p>\n<p>See how &#8220;count&#8221; and &#8220;count + 1&#8221; picks up both?\u00a0 Also necessary to use &#8220;Or&#8221; for this to work properly. (an &#8220;And&#8221; would not select anything.\u00a0 Why?)\u00a0 These then go to work in two Select by Attribute lines:<\/p>\n<p><a href=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/SbyA2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3459\" src=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/SbyA2.jpg\" alt=\"\" width=\"786\" height=\"46\" srcset=\"https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/SbyA2.jpg 786w, https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/SbyA2-300x18.jpg 300w, https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/SbyA2-768x45.jpg 768w\" sizes=\"auto, (max-width: 786px) 100vw, 786px\" \/><\/a><\/p>\n<p>Selection problem solved &#8211; we&#8217;re done here.<\/p>\n<p><strong>The Output Problem<\/strong><\/p>\n<p>I fretted over this one a bit.\u00a0 In the end, I kept it simple by recognising that my original script worked fine so long as the windows were consecutive (1&amp;2, 3&amp;4, 5&amp;6, etc).\u00a0 Then it occurred to me that if I could take advantage of there being windows that start on odd and even days,\u00a0thus only needing one set of input and output layers.\u00a0 A relatively easy way to do this is to use the <a href=\"https:\/\/www.geeksforgeeks.org\/what-is-a-modulo-operator-in-python\/\" target=\"_blank\" rel=\"noopener noreferrer\">modulo operator<\/a>, a somewhat obscure cousin of +, -, * and \/.\u00a0 The modulo operator returns the <em>remainder<\/em> of a division operation.\u00a0 For example, if I divide 13 by 5, I get 2 (5 x 2 = 10) with a remainder of 3, which is what you get when you use modulo.\u00a0 In code, that might look something like:<\/p>\n<p>13 modulo 5 = 3, or in Python, 13 % 5 = 3.<\/p>\n<p>I&#8217;ll use this to my advantage as an even number mod 2 will always return 0.\u00a0 I&#8217;ll use this with an if statement to branch which layer Append sends the output to, which I can later merge.<\/p>\n<p>To implement all this I first needed to set up two output layers &#8211; each with the same set of attributes as my inputs but with no actual features in them.\u00a0 In Pro I simply created\u00a0two copies of\u00a0a layer with the right attributes (DeerAOutOdd and DeerAOutEven)\u00a0in the project geodatabase and deleted all their records.<\/p>\n<p>In the code\u00a0I set then up variables to refer to these:<\/p>\n<p><a href=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/OutputVariables.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3460\" src=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/OutputVariables.jpg\" alt=\"\" width=\"247\" height=\"41\" \/><\/a><\/p>\n<p>Inside the while loop, after Near runs, I use modulo on the count variable in an if statement to determine if it&#8217;s odd or even.\u00a0 If it&#8217;s even, send the selected records to DeerAOutEven.\u00a0 If not, send\u00a0them to DeerAOutOdd:<\/p>\n<p><a href=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/WhileMod.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3461\" src=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/WhileMod.jpg\" alt=\"\" width=\"448\" height=\"92\" srcset=\"https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/WhileMod.jpg 448w, https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/WhileMod-300x62.jpg 300w\" sizes=\"auto, (max-width: 448px) 100vw, 448px\" \/><\/a><\/p>\n<p>&#8220;if count % 2 == 0:&#8221; does the deciding &#8211; it has to be &#8220;==&#8221; as this is how we do comparisons in Python.\u00a0 A lone &#8220;=&#8221; is used to\u00a0<em>set<\/em> the value of a variable which doesn&#8217;t really make any sense in this context.\u00a0 If I were to translate this line, it might read: &#8220;If you divide the value of count by two and the reminder is 0&#8221;.\u00a0 The code then executes the next line.\u00a0 If not, it runs the else line<\/p>\n<p>Output sussed.\u00a0 We&#8217;re ready to run.<\/p>\n<p>I&#8217;ll include the whole script at the bottom of this post for the gluttons amongst you (please seek help).\u00a0 Happily, this all worked pretty well.\u00a0 There was a final table join to do (using the OBJECT_ID attribute) to bring the two sets of data together into one layer which was then exported as an Excel sheet and sent off for review:<\/p>\n<p><a href=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/FinalOutput.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3462\" src=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/FinalOutput.jpg\" alt=\"\" width=\"1827\" height=\"797\" srcset=\"https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/FinalOutput.jpg 1827w, https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/FinalOutput-300x131.jpg 300w, https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/FinalOutput-1024x447.jpg 1024w, https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/FinalOutput-768x335.jpg 768w, https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/FinalOutput-1536x670.jpg 1536w\" sizes=\"auto, (max-width: 1827px) 100vw, 1827px\" \/><\/a><\/p>\n<p>You can see the Day_id values here (column H).\u00a0 The odd windows are highlighted in blue &#8211; as expected, the first day only has one set of distances.\u00a0 The even windows are highlighted in greenish at right\u00a0and\u00a0 I think we can now deliver what was asked of us.\u00a0 With\u00a0a bit more work, I could put this script to work on the other nine sets of data when they come in and everyone&#8217;s (hopefully) happy.\u00a0 I&#8217;m still not sure this is the best format for my end user, but in any event I&#8217;ve got the results and anything else is about repacking them.<\/p>\n<p>It&#8217;s been worthwhile to spend the time writing this script given 1) the number of times I&#8217;ll need to rerun it on different data and 2) the sheer number of times it has to loop for each animal &#8211; 52 for DeerA so possibly around 520 times to do this repetitive task.\u00a0 That alone was worth the price of admission.\u00a0 Plus I got two blog posts out of it!\u00a0 <em>(Ed. if only you were paid by the post, you&#8217;d be rich by now.)\u00a0\u00a0<\/em><\/p>\n<p>As with any of my scripts, I&#8217;m sure someone who really knew what they were doing could put together something much more elegant and efficient.\u00a0 I&#8217;ll get there one day.<\/p>\n<p>C<\/p>\n<p>Full script here with one comment.\u00a0 I hard coded the number of times the while loop would run with\u00a0<a href=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/while.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3463\" src=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/while.jpg\" alt=\"\" width=\"145\" height=\"24\" \/><\/a>.\u00a0 The 52 comes from the number of windows, which is essentially the number of days.\u00a0 As noted in the comments, I could have used something like GetCount to find the total number of days automatically each time it starts &#8211; something I&#8217;ll probably do when this gets scaled up to do the other nine animals.\u00a0 One less thing for me to stuff up.<\/p>\n<p><a href=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/Part1A.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3465\" src=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/Part1A.jpg\" alt=\"\" width=\"857\" height=\"257\" srcset=\"https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/Part1A.jpg 857w, https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/Part1A-300x90.jpg 300w, https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/Part1A-768x230.jpg 768w\" sizes=\"auto, (max-width: 857px) 100vw, 857px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/Part2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3466\" src=\"https:\/\/d-blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/Part2.jpg\" alt=\"\" width=\"856\" height=\"631\" srcset=\"https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/Part2.jpg 856w, https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/Part2-300x221.jpg 300w, https:\/\/blogs.lincoln.ac.nz\/gis\/wp-content\/uploads\/sites\/3\/2021\/10\/Part2-768x566.jpg 768w\" sizes=\"auto, (max-width: 856px) 100vw, 856px\" \/><\/a><\/p>\n<p>(If you&#8217;ve read this far you should seek immediate help.)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We follow up a previous post and attempt to clean up a spatial mess of our own creation Previously, we looked at a script that calculates distances between deer locations.\u00a0 Things were going along swimmingly until I realised that I hadn&#8217;t quite done what was asked.\u00a0 That knock on my door was Deer A, just [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-3451","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blogs.lincoln.ac.nz\/gis\/wp-json\/wp\/v2\/posts\/3451","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.lincoln.ac.nz\/gis\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.lincoln.ac.nz\/gis\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.lincoln.ac.nz\/gis\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.lincoln.ac.nz\/gis\/wp-json\/wp\/v2\/comments?post=3451"}],"version-history":[{"count":1,"href":"https:\/\/blogs.lincoln.ac.nz\/gis\/wp-json\/wp\/v2\/posts\/3451\/revisions"}],"predecessor-version":[{"id":4061,"href":"https:\/\/blogs.lincoln.ac.nz\/gis\/wp-json\/wp\/v2\/posts\/3451\/revisions\/4061"}],"wp:attachment":[{"href":"https:\/\/blogs.lincoln.ac.nz\/gis\/wp-json\/wp\/v2\/media?parent=3451"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.lincoln.ac.nz\/gis\/wp-json\/wp\/v2\/categories?post=3451"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.lincoln.ac.nz\/gis\/wp-json\/wp\/v2\/tags?post=3451"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}