{"id":64185,"date":"2024-07-08T03:01:39","date_gmt":"2024-07-07T17:01:39","guid":{"rendered":"http:\/\/www.rjmprogramming.com.au\/ITblog\/?p=64185"},"modified":"2024-07-08T10:01:20","modified_gmt":"2024-07-08T00:01:20","slug":"distance-interfacing-to-google-chart-geo-chart-tutorial","status":"publish","type":"post","link":"https:\/\/www.rjmprogramming.com.au\/ITblog\/distance-interfacing-to-google-chart-geo-chart-tutorial\/","title":{"rendered":"Distance Interfacing to Google Chart Geo Chart Tutorial"},"content":{"rendered":"<div id=\"ctwt\" style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Distance\/distance.php\"><img decoding=\"async\" aria-describedby=\"caption-ctwt\" style=\"float:left; border: 15px solid pink;\" alt=\"Distance Interfacing to Google Chart Geo Chart Tutorial\" id='aacpti' src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Distance\/distance_nowgc.gif\" title=\"Distance Interfacing to Google Chart Geo Chart Tutorial\" \/><\/a><p id=\"caption-ctwt\" class=\"wp-caption-text\">Distance Interfacing to Google Chart Geo Chart Tutorial<\/p><\/div>\n<p>Today, we&#8217;re changing the primary interfacing mode of <a title='Change the Weather Tutorial' href='#cwt'>Change the Weather Tutorial<\/a>&#8216;s Distance via Geographicals web application &#8230;<\/p>\n<ul>\n<li>from trying to interface to Weather APIs &#8230;<\/li>\n<li>to interfacing to the <a target=_blank href='https:\/\/developers.google.com\/chart\/interactive\/docs\/index' title='Google Chart Tools provide a perfect way to visualize data on your website. From simple line charts to complex hierarchical tree maps, the chart galley provides a large number of well-designed chart types. Populating your data is easy using the provided client- and server-side tools.'>Google Charts<\/a> <a target=_blank title='Google Chart Geo Chart information from Google' href='https:\/\/developers.google.com\/chart\/interactive\/docs\/gallery\/geochart'>Geo Chart<\/a>, via an emoji button &#127760; hover or click, and it&#8217;s own menu of functionality, presented as the call is made<\/li>\n<\/ul>\n<p>We needed new interfacing protocols to the &#8220;child&#8221; Geo Chart interfacer to make this possible &#8230;<\/p>\n<p>&lt;?php echo &#8221;<br \/>\n<code><br \/>\n        if (window.self !== window.top && ('' + top.document.URL).indexOf('\/PHP\/Distance') == -1) {<br \/>\n           ournamec=ournamec;<br \/>\n        } else if (documentURL.indexOf('?title=') != -1 && documentURL.indexOf('&') == -1 && documentURL.indexOf('#') == -1) {<br \/>\n           var lho=0;<br \/>\n           var ourico='';<br \/>\n           var ourpl='';<br \/>\n           var ourti=location.search.split('title=')[1] ? decodeURIComponent(location.search.split('title=')[1].split('&')[0]) : '';<br \/>\n           \/\/alert('Ourti=' + ourti);<br \/>\n           if (eval('' + ourti.split(',').length) &gt;= 2) {<br \/>\n             lho=eval(-2 + ourti.split(',').length);<br \/>\n             var ourlgis=ourti.split(',')[eval(-1 + ourti.split(',').length)];<br \/>\n             ourico=ourti.split(';')[0];<br \/>\n             if (eval('' + ourico.length) == 2) {<br \/>\n               ourti=ourti.replace(ourico + ';','');<br \/>\n               ourico=ourico.toUpperCase();<br \/>\n             } else {<br \/>\n               ourico='';<br \/>\n             }<br \/>\n             var ourltis='', sparet='';<br \/>\n             var slc=-1;<br \/>\n             while (ourti.split(',')[lho].slice(slc).substring(0,1).replace('-','0').replace('.','0') &gt;= '0' && ourti.split(',')[lho].slice(slc).substring(0,1).replace('-','0').replace('.','0') &lt;= '9' && Math.abs(slc) &lt;= eval('' + ourti.split(',')[lho].length)) {<br \/>\n               sparet=ourltis;<br \/>\n               ourltis=ourti.split(',')[lho].slice(slc).substring(0,1) + sparet;<br \/>\n               \/\/alert('ourltis =' + ourltis);<br \/>\n               slc--;<br \/>\n             }<br \/>\n             if (lho != 0) {<br \/>\n               ourpl=ourti.split('' + ourltis)[0];<br \/>\n             } else if (ourltis != ourti.split(',')[0]) {<br \/>\n               ourpl=ourti.split(',')[0].replace(ourltis,'');<br \/>\n             }<br \/>\n             \/\/alert('ourltis=' + ourltis);<br \/>\n             var winobj=window.self;<br \/>\n             var jgeo='ifcountries';<br \/>\n        winobj.document.getElementById(jgeo).style.position='absolute';<br \/>\n        winobj.document.getElementById(jgeo).style.top='0px';<br \/>\n        winobj.document.getElementById(jgeo).style.left='0px';<br \/>\n        winobj.document.getElementById(jgeo).style.width='100%';<br \/>\n        winobj.document.getElementById(jgeo).style.height='100%';<br \/>\n        winobj.document.getElementById(jgeo).style.opacity='1.0';<br \/>\n        winobj.document.getElementById(jgeo).style.zIndex='44';<br \/>\n        winobj.document.getElementById(jgeo).style.display='block';<br \/>\n        if (ournamec != '') {<br \/>\n          if (ourpl != '') {<br \/>\n            ourpl+=', ';<br \/>\n          }<br \/>\n        }<br \/>\n        if (ournamec != '') {<br \/>\n        if (ourico != '') {<br \/>\n        winobj.document.getElementById(jgeo).src='\/\/www.rjmprogramming.com.au\/PHP\/GeoChart\/geo_chart.php?title=' + ourico + encodeURIComponent(';') + encodeURIComponent(ourpl + ournamec) + '&aregexographicals=y&aregeographicals=&width=500&height=312&onclick=y&country=Places&popularity=&data=%20[' + ourltis + '|' + ourlgis + '|~' + encodeURIComponent(ourpl + ournamec) + '~,2]';<br \/>\n        \/\/alert('1:' + winobj.document.getElementById(jgeo).src);<br \/>\n        } else {<br \/>\n        winobj.document.getElementById(jgeo).src='\/\/www.rjmprogramming.com.au\/PHP\/GeoChart\/geo_chart.php?title=' + encodeURIComponent(ourpl + ournamec) + '&aregexographicals=y&aregeographicals=&width=500&height=312&onclick=y&country=Places&popularity=&data=%20[' + ourltis + '|' + ourlgis + '|~' + encodeURIComponent(ourpl + ournamec) + '~,2]';<br \/>\n        \/\/alert('2:' + winobj.document.getElementById(jgeo).src);<br \/>\n        }<br \/>\n        } else if (ourpl != '') {<br \/>\n        if (ourico != '') {<br \/>\n        winobj.document.getElementById(jgeo).src='\/\/www.rjmprogramming.com.au\/PHP\/GeoChart\/geo_chart.php?title=' + ourico + encodeURIComponent(';') + encodeURIComponent(ourpl) + '&aregexographicals=y&aregeographicals=&width=500&height=312&onclick=y&country=Places&popularity=&data=%20[' + ourltis + '|' + ourlgis + '|~' + encodeURIComponent(ourpl) + '~,2]';<br \/>\n        \/\/alert('3:' + winobj.document.getElementById(jgeo).src);<br \/>\n        } else {<br \/>\n        winobj.document.getElementById(jgeo).src='\/\/www.rjmprogramming.com.au\/PHP\/GeoChart\/geo_chart.php?title=' + encodeURIComponent(ourpl) + '&aregexographicals=y&aregeographicals=&width=500&height=312&onclick=y&country=Places&popularity=&data=%20[' + ourltis + '|' + ourlgis + '|~' + encodeURIComponent(ourpl) + '~,2]';<br \/>\n        \/\/alert('4:' + winobj.document.getElementById(jgeo).src);<br \/>\n        }<br \/>\n        } else if (ourico != '') {<br \/>\n        winobj.document.getElementById(jgeo).src='\/\/www.rjmprogramming.com.au\/PHP\/GeoChart\/geo_chart.php?title=' + ourico + encodeURIComponent(';') + 'My%20Place&aregexographicals=y&aregeographicals=&width=500&height=312&onclick=y&country=Places&popularity=&data=%20[' + ourltis + '|' + ourlgis + '|~My%20Place~,2]';<br \/>\n        \/\/alert('5:' + winobj.document.getElementById(jgeo).src);<br \/>\n        } else {<br \/>\n        winobj.document.getElementById(jgeo).src='\/\/www.rjmprogramming.com.au\/PHP\/GeoChart\/geo_chart.php?title=My%20Place&aregexographicals=y&aregeographicals=&width=500&height=312&onclick=y&country=Places&popularity=&data=%20[' + ourltis + '|' + ourlgis + '|~My%20Place~,2]';<br \/>\n        \/\/alert('6:' + winobj.document.getElementById(jgeo).src);<br \/>\n        }<br \/>\n             setTimeout(function(){ latergmenu(ourpl + ournamec, ourltis, ourlgis); }, 10000);<br \/>\n           }<br \/>\n        }<br \/>\n<\/code><br \/>\n&#8220;; ?&gt;<\/p>\n<p> &#8230; and new Javascript functions up at &#8220;parent&#8221; Distance via Geographicals PHP &#8230;<\/p>\n<p>&lt;?php echo &#8221;<br \/>\n<code><br \/>\nfunction smartemoji() {<br \/>\n   setTimeout(function(){<br \/>\n     document.getElementById('topa').innerHTML='&amp;#127760;';<br \/>\n     document.getElementById('bottoma').innerHTML='&amp;#127760;';<br \/>\n   }, 5000);<br \/>\n}<br \/>\n<br \/>\nfunction smartcha(iamvalue, iamid, aois) {<br \/>\n  var vval='', vplace='', vcountry='';<br \/>\n  if (aois.id == 'topa') {<br \/>\n    vval=document.getElementById('from').value;<br \/>\n    if (vval.indexOf('country=') != -1 && vval.indexOf('fromplace=') != -1) {<br \/>\n       vplace=vval.split('fromplace=')[1].split('&')[0].split('#')[0];<br \/>\n       vcountry=vval.split('country=')[1].split('&')[0].split('#')[0];<br \/>\n       if (vcountry != '' && vplace != '') {<br \/>\n         vplace+=', ';<br \/>\n       }<br \/>\n    } else if (vval.indexOf('country=') != -1 && vval.indexOf('place=') != -1) {<br \/>\n       vplace=vval.split('olace=')[1].split('&')[0].split('#')[0];<br \/>\n       vcountry=vval.split('country=')[1].split('&')[0].split('#')[0];<br \/>\n       if (vcountry != '' && vplace != '') {<br \/>\n         vplace+=', ';<br \/>\n       }<br \/>\n    }<br \/>\n  } else {<br \/>\n    vval=document.getElementById('to').value;<br \/>\n    \/\/alert(vval);<br \/>\n    if (vval.indexOf('country=') != -1 && vval.indexOf('&place=') != -1) {<br \/>\n       vplace=vval.split('&place=')[1].split('&')[0].split('#')[0];<br \/>\n       vcountry=vval.split('country=')[1].split('&')[0].split('#')[0];<br \/>\n       if (vcountry != '' && vplace != '') {<br \/>\n         vplace+=', ';<br \/>\n       }<br \/>\n       \/\/alert(iamid + ' ' + vplace + vcountry);<br \/>\n    } else if (vval.indexOf('country=') != -1 && vval.indexOf('fromplace=') != -1) {<br \/>\n       vplace=vval.split('fromplace=')[1].split('&')[0].split('#')[0];<br \/>\n       vcountry=vval.split('country=')[1].split('&')[0].split('#')[0];<br \/>\n       if (vcountry != '' && vplace != '') {<br \/>\n         vplace+=', ';<br \/>\n       }<br \/>\n    }<br \/>\n }<br \/>\n  if (iamvalue.indexOf(\"-0\") != -1) {<br \/>\n  var latd=document.getElementById(\"latd\");<br \/>\n  var latm=document.getElementById(\"latm\");<br \/>\n  var lats=document.getElementById(\"lats\");<br \/>\n  var longd=document.getElementById(\"longd\");<br \/>\n  var longm=document.getElementById(\"longm\");<br \/>\n  var longs=document.getElementById(\"longs\");<br \/>\n  <br \/>\n     if (iamid == \"gnols\") {<br \/>\n  latd=document.getElementById(\"tald\");<br \/>\n  latm=document.getElementById(\"talm\");<br \/>\n  lats=document.getElementById(\"tals\");<br \/>\n  longd=document.getElementById(\"gnold\");<br \/>\n  longm=document.getElementById(\"gnolm\");<br \/>\n  longs=document.getElementById(\"gnols\");<br \/>\n     }<br \/>\n<br \/>\n  var latsign = \"+\";<br \/>\n  if (latd.value.replace(\"-\", \"\") != latd.value) latsign = \"-\";<br \/>\n  var longsign = \"+\";<br \/>\n  if (longd.value.replace(\"-\", \"\") != longd.value) longsign = \"-\";<br \/>\n  var alat = eval(latd.value);<br \/>\n  alat = Math.abs(alat);<br \/>\n  var alatsuffix = 0;<br \/>\n  var along = eval(longd.value);<br \/>\n  along = Math.abs(along);<br \/>\n  var alongsuffix = 0;<br \/>\n  if (latm.value != \"0\" || lats.value != \"0\") {<br \/>\n    alatsuffix = eval((latm.value) \/ 60.0);<br \/>\n    alatsuffix = eval(alatsuffix + (lats.value) \/ 3600.0);<br \/>\n  } else if (latd.value.replace(\".\", \"\") != latd.value) {<br \/>\n    alatsuffix = 0;<br \/>\n  }<br \/>\n  if (longm.value != \"0\" || longs.value != \"0\") {<br \/>\n    alongsuffix = eval((longm.value) \/ 60.0);<br \/>\n    alongsuffix = eval(alongsuffix + (longs.value) \/ 3600.0);<br \/>\n  } else if (longd.value.replace(\".\", \"\") != longd.value) {<br \/>\n    alongsuffix = 0;<br \/>\n  }<br \/>\n  <br \/>\n  var lata = eval(alatsuffix + alat);<br \/>\n  var latis=latsign + lata;<br \/>\n  var xlatis = latis.replace(\"-\", \"\").replace(\"+\", \"\");<br \/>\n  if (xlatis == latis) latis = \"+\" + latis;<br \/>\n  var longa = eval(alongsuffix + along);<br \/>\n  var longis=longsign + longa;<br \/>\n  var retis = [\"\", \"\"];<br \/>\n<br \/>\n   if (iamid == \"gnols\") {<br \/>\n      document.getElementById(\"weatherto\").style.display = 'block';<br \/>\n      \/\/retis = find_nearest(latis, longis);<br \/>\n      \/\/alert(retis[0] + \" then \" + retis[1]);<br \/>\n      document.getElementById(\"weatherto\").src = '\/\/www.rjmprogramming.com.au\/PHP\/GeoChart\/geo_chart.php?title=' + encodeURIComponent(vplace + vcountry) + encodeURIComponent(latsign.replace('+','')) + ('' + latis).replace('-','').replace('+','').trim() + encodeURIComponent(',') + encodeURIComponent(longsign.replace('+','')) + ('' + longis).replace('-','').replace('+','').trim();<br \/>\n   } else if (iamid == \"longs\") {<br \/>\n      document.getElementById(\"weatherfrom\").style.display = 'block';<br \/>\n      \/\/retis = find_nearest(latis, longis);<br \/>\n      \/\/alert(retis[0] + \" tHen \" + retis[1]);<br \/>\n      document.getElementById(\"weatherfrom\").src = '\/\/www.rjmprogramming.com.au\/PHP\/GeoChart\/geo_chart.php?title=' + encodeURIComponent(vplace + vcountry) + encodeURIComponent(latsign.replace('+','')) + ('' + latis).replace('-','').replace('+','').trim() + encodeURIComponent(',') + encodeURIComponent(longsign.replace('+','')) + ('' + longis).replace('-','').replace('+','').trim();<br \/>\n   }<br \/>\n  }<br \/>\n}<br \/>\n<\/code><br \/>\n&#8220;; ?&gt;<\/p>\n<p> &#8230; to make this happen.<\/p>\n<p>Codewise &#8230;<\/p>\n<ul>\n<li><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/GeoChart\/geo_chart.php---------------------------------------------------------------------------------------GETME\">we changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/GeoChart\/geo_chart.php---------------------------------------------------------------------------------------GETME\">geo_chart.php<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/GeoChart\/geo_chart.php\">Geo Chart interfacer<\/a> &#8230; is now called by &#8230;<\/li>\n<li><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/Distance\/distance.php----GETME\">the changed<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Distance\/distance.php----GETME\">distance.php<\/a> <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Distance\/distance.php\">Distance via Geographicals<\/a> web application<\/li>\n<\/ul>\n<p><!--p>You can also see this play out at WordPress 4.1.1's <a target=_blank  href='\/\/www.rjmprogramming.com.au\/ITblog\/distance-interfacing-to-google-chart-geo-chart-tutorial\/'>Distance Interfacing to Google Chart Geo Chart Tutorial<\/a>.<\/p-->\n<hr>\n<p id='cwt'>Previous relevant <a target=_blank title='Change the Weather Tutorial' href='\/\/www.rjmprogramming.com.au\/ITblog\/change-the-weather-tutorial\/'>Change the Weather Tutorial<\/a> is shown below.<\/p>\n<div id=\"ctwt\" style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/place_latlong.php\"><img decoding=\"async\" aria-describedby=\"caption-ctwt\" style=\"float:left; border: 15px solid pink;\" alt=\"Change the Weather Tutorial\" id='aacpti' src=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/ChangeTheWeather.jpg\" title=\"Change the Weather Tutorial\" \/><\/a><p id=\"caption-ctwt\" class=\"wp-caption-text\">Change the Weather Tutorial<\/p><\/div>\n<p id='pctwt'>Today&#8217;s tutorial&#8217;s title is a bit cheekier than it really is, as we talk about a change to the software integration of a Weather Reporting web service for the geographicals suite here at this blog.   The previous arrangements we detailed below at <a target=_blank title=\"Integrating Global Weather Ajax with Geographicals Tutorial\" href=\"#pigwawgt\">Integrating Global Weather Ajax with Geographicals Tutorial<\/a> as shown below.<\/p>\n<p>The previous weather reporting integration used a Web Service and for the changed arrangement we more or less <a target=_blank title='Data scraping information from Wikipedia' href='http:\/\/en.wikipedia.org\/wiki\/Data_scraping'>screen scrape<\/a> with the wonderfully generous <a target=_blank title='World Weather Online' href='http:\/\/www.worldweatheronline.com'>World Weather Online<\/a> website &#8230; thanks a lot.   And thanks, too, for the <a target=_blank title='Which weather web services do you know?' href='http:\/\/stackoverflow.com\/questions\/8446360\/which-weather-data-web-services-do-you-know'>link<\/a> that helped me find this website, as well as the excellent link <a target=_blank title='International country codes' href='http:\/\/www.binarytides.com\/php-array-iso-3316-country-list\/'>here<\/a> that helped with the international country codes that came in handy for the changed arrangements.<\/p>\n<p>Wanted to <i>more or less<\/i> have the changes in one place and it <i>more or less<\/i> happened that way, with the vast majority of changes needed to the <i>called<\/i> <a target=_blank title='get_weather.php' href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTML_CSS\/get_weather.php-GETME\">get_weather.php<\/a> code.   The <i>calling<\/i> <a target=_blank title='place_latlong.php' href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTML_CSS\/place_latlong.php-GETME\">place_latlong.php<\/a> called get_weather.php in a different place, but this is only done because am not overly certain the old arrangements will not resurrect themselves.    The old way was a bit different in that it did not need any State\/Territory type information to proceed, but sometimes our screen scraping method does need to ask for this information.<\/p>\n<p>Think it is good with software integration to aim to keep at least one aspect of the resultant code the same, and so it is here, with the same <a target=_blank title='iframe' href='http:\/\/www.w3schools.com\/tags\/tag_iframe.asp'>iframe<\/a> and <a target=_blank title='Ajax' href='http:\/\/www.rjmprogramming.com.au\/wordpress\/?cat=63'>Ajax<\/a> arrangements kept.<\/p>\n<p><b><i>Did you know?<\/i><\/b><\/p>\n<p>If you&#8217;ve examined, closely, the changes to <a target=_blank title='get_weather.php' href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTML_CSS\/get_weather.php-GETME\">get_weather.php<\/a> above you may have wondered how I could get away with URLs involving city and country (codes) and sometimes state parts and yet, with the code, we are pretty slack about uppercase\/lowercase stringency.    However, did you notice the URL template we first got as a model to try to achieve &#8230;<\/p>\n<p><a target=_blank title='The weather in Chittagong, Bangladesh ... \u0986\u09ac\u09b9\u09be\u0993\u09af\u09bc\u09be \u09ad\u09be\u09b2\u09cb \u0986\u09b6\u09be \u0995\u09b0\u09bf' href='http:\/\/www.worldweatheronline.com\/CHITTAGONG-weather\/BD.ASPX'>HTTP:\/\/www.worldweatheronline.com\/CHITTAGONG-weather\/BD.ASPX<\/a><\/p>\n<p>&#8230; the .ASPX extension tells you this is ASP.Net and would be hosted on a Windows server (and this all happens courtesy of the early days with MS-DOS and some interesting file naming informational link is <a target=_blank title='MS-DOS file names' href='https:\/\/support.microsoft.com\/kb\/142982'>here<\/a>), where files in uppercase are the same as those in lowercase or a mix of both, and in this way we get away with some slackness regarding the construction of our URL.   If the hosting was Linux or Unix there would be a much more complicated task needed by the programmer, or, as would probably be more likely the case, the website URLs would be arranged differently.<\/p>\n<hr \/>\n<p id=\"pigwawgt\">Previous weather integration with geographicals suite via GlobalWeather <a target=_blank title=\"Integrating Global Weather Ajax with Geographicals Tutorial\" href=\"http:\/\/www.rjmprogramming.com.au\/wordpress\/?p=5807\">Integrating Global Weather Ajax with Geographicals Tutorial<\/a> is shown below.<\/p>\n<div id=\"cigwawgt\" style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/place_latlong.php\"><img decoding=\"async\" aria-describedby=\"caption-cigwawgt\" style=\"float:left; border: 15px solid pink;\" alt=\"Integrating Global Weather Ajax with Geographicals Tutorial\" id='aacpti' src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/IntegrationWeather.png\" title=\"Integrating Global Weather Ajax with Geographicals Tutorial\" \/><\/a><p id=\"caption-cigwawgt\" class=\"wp-caption-text\">Integrating Global Weather Ajax with Geographicals Tutorial<\/p><\/div>\n<p id='igwawgt'>Today&#8217;s tutorial is all about software integration and complements <a target=_blank title='Integrating Global Weather into Geographicals Tutorial' href='#igwigt'>yesterday&#8217;s<\/a> <a target=_blank title='Integrating Global Weather into Geographicals Tutorial' href='#igwigt'>Integrating Global Weather into Geographicals Tutorial<\/a> as shown below.<\/p>\n<p>Software integration takes many forms, and Ajax functionality is that little bit different, perhaps, in that with the tablet and mobile phone <a target=_blank title='Touchpad terminology' href='http:\/\/support.apple.com\/kb\/ht4721'><i>&#8220;touch&#8221;<\/i><\/a> (with all its associated terminology like <a target=_blank title='Gesture recognition information from Wikipedia' href='http:\/\/en.wikipedia.org\/wiki\/Gesture_recognition'><i>&#8220;gesture recognition&#8221;<\/i><\/a>, <i>&#8220;pinch&#8221;<\/i> and &#8220;<i>smart zoom&#8221;<\/i>)  is a concept, with more currency than the <i>&#8220;click&#8221;<\/i> and <i>&#8220;hover&#8221;<\/i> (of the original web-based systems) and this has increased the choices for ways to achieve things, with there being more accepted mobile world &#8220;ways&#8221; sometimes a bit different to the laptop\/notebook\/desktop &#8220;ways&#8221;.   For instance, with Ajax, and the laptop\/notebook\/desktop world, I tend to want to do a lot with the <i>&#8220;hover&#8221;<\/i> (onmouseover) event, but this does not always translate well in the mobile phone\/tablet world.    In the mobile phone\/tablet world multiple window use can get a bit awkward with the smaller screens.<\/p>\n<p>In today&#8217;s tutorial we show some integration techniques using HTML <i>&#8220;select&#8221;<\/i> (dropdown) and\/or <br \/>&#8220;&lt;a &#8230;&gt;&lt;img &#8230; \/&gt;&lt;\/a&gt;&#8221; (button) approaches, with the <i>&#8220;hover&#8221;<\/i> event doing the same as the <i>&#8220;click&#8221;<\/i> event.   Whether you like this approach is debatable and you may want to trial such approaches with potential users when you come to creating commercial products.   Ideally with catering for all of mobile phone, tablet, desktop and laptop\/notebook users you can use the same base code (you may disagree here), with Javascript, HTML and CSS methods employed to compartmentalize device-dependent code using all the various forms of <a target=_blank title='if' href='http:\/\/www.kipling.org.uk\/poems_if.htm'><i>&#8220;if&#8221;<\/i><\/a> in the softwares.<\/p>\n<p>So the <i>&#8220;Get the Weather&#8221;<\/i> functionality of <a target=_blank title='Integrating Global Weather into Geographicals Tutorial' href='#agwhgpt'>two days ago<\/a> has a geographical component, that is for sure &#8230; the <i>&#8220;where&#8221;<\/i> in life is soooo programmable, isn&#8217;t it? &#8230; so we can integrate it into other Geographical software components we&#8217;ve been developing here on this blog.<\/p>\n<p>Today&#8217;s part two (of two) of integration tasks, which includes the requirement that some Geographicals of unknown placename should <i>&#8220;map&#8221;<\/i> themselves to the nearest placename (via a function called <i>find_nearest<\/i> (with respect to whatever data source your software uses)), adds the <i>&#8220;Get the Weather&#8221;<\/i> Ajax software functionality to each of the <i>&#8220;independent child&#8221;<\/i> functions of the Geographicals suite &#8230; Sun Angles, Moon Angles, Great Circle Distance and Coriolis Force.   Part one (of two) of integration tasks of <a target=_blank title='Integrating Global Weather into Geographicals Tutorial' href='#igwigt'>yesterday<\/a> was to associate the <i>&#8220;Get the Weather&#8221;<\/i> with a placename in the world.   This is the more obvious integration task and we show two bits of integration to make that happen <a target=_blank title='Integrating Global Weather into Geographicals Tutorial' href='#igwigt'>way below<\/a>.<\/p>\n<p>Here is a new link to some downloadable PHP programming source code explaining changes made specifically for the <i>&#8220;Get the Weather&#8221;<\/i> software component of the Sun Angles functionality <a target=_blank title='column_chart_diff.php' href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/SunAngle\/sun_angle_now_at.php---GETME\">here<\/a>.<\/p>\n<p>Here is a new link to some downloadable PHP programming source code explaining changes made specifically for the <i>&#8220;Get the Weather&#8221;<\/i> software component of the Moon Angles functionality <a target=_blank title='column_chart_diff.php' href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/MoonAngle\/moon_angle_now_at.php---GETME\">here<\/a>.<\/p>\n<p>Here is a new link to some downloadable PHP programming source code explaining changes made specifically for the <i>&#8220;Get the Weather&#8221;<\/i> software component of the Great Circle Distance functionality <a target=_blank title='column_chart_diff.php' href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/Distance\/distance.php---GETME\">here<\/a>.<\/p>\n<p>Here is a new link to some downloadable PHP programming source code explaining changes made specifically for the <i>&#8220;Get the Weather&#8221;<\/i> software component of the Coriolis Force functionality <a target=_blank title='column_chart_diff.php' href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/Coriolis\/coriolis_force_at.php---GETME\">here<\/a>.<\/p>\n<p>Here is a new link to some downloadable PHP programming source code explaining changes made specifically for the Geographical supervisor of the <i>&#8220;Get the Weather&#8221;<\/i> software component (and others)  <a target=_blank title='column_chart_diff.php' href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/place_latlong_weather.php-GETME\">here<\/a>.<\/p>\n<p>And here is the <i>&#8220;independent child&#8221;<\/i> <a target=_blank title='Integrating Global Weather Ajax with Geographicals Tutorial' href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/SunAngle\/sun_angle_now_at.php\">Sun Angles live run<\/a> (which now includes <i>&#8220;Get the Weather&#8221;<\/i>).<\/p>\n<p>And here is the <i>&#8220;independent child&#8221;<\/i> <a target=_blank title='Integrating Global Weather Ajax with Geographicals Tutorial' href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/MoonAngle\/moon_angle_now_at.php\">Moon Angles live run<\/a> (which now includes <i>&#8220;Get the Weather&#8221;<\/i>).<\/p>\n<p>And here is the <i>&#8220;independent child&#8221;<\/i> <a target=_blank title='Integrating Global Weather Ajax with Geographicals Tutorial' href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Distance\/distance.php\">Great Circle Distance live run<\/a> (which now includes <i>&#8220;Get the Weather&#8221;<\/i>).<\/p>\n<p>And here is the <i>&#8220;independent child&#8221;<\/i> <a target=_blank title='Integrating Global Weather Ajax with Geographicals Tutorial' href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Coriolis\/coriolis_force_at.php\">Coriolis Force live run<\/a> (which now includes <i>&#8220;Get the Weather&#8221;<\/i>).<\/p>\n<p>And finally here is the <i>&#8220;supervisory&#8221;<\/i> <a target=_blank title='Integrating Global Weather into Geographicals Tutorial' href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/place_latlong.php\">live run<\/a> to test all the integration (which now includes <i>&#8220;Get the Weather&#8221;<\/i>) yourself.<\/p>\n<hr \/>\n<p id='igwigt'>Previous relevant <a target=_blank title='Integrating Global Weather into Geographicals Tutorial' href='http:\/\/www.rjmprogramming.com.au\/wordpress\/?p=5798'>Integrating Global Weather into Geographicals Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/place_latlong.php\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"Integrating Global Weather into Geographicals Tutorial\" id='aacpti' src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/WeatherIntegration.jpg\" title=\"Integrating Global Weather into Geographicals Tutorial\" \/><\/a><p class=\"wp-caption-text\">Integrating Global Weather into Geographicals Tutorial<\/p><\/div>\n<p>Today&#8217;s tutorial is all about software integration and builds on <a target=_blank title='Ajax Global Weather HTTP Get Primer Tutorial' href='#agwhgpt'>yesterday&#8217;s<\/a> <a target=_blank title='Ajax Global Weather HTTP Get Primer Tutorial' href='#agwhgpt'>Ajax Global Weather HTTP Get Primer Tutorial<\/a> as shown below.<\/p>\n<p>Sometimes (well, in my experience) you get the best <i>&#8220;kick&#8221;<\/i> out of integrating software components, rather than the writing of the component itself.   Sounds weird, doesn&#8217;t it, but the fact is, the more functionality you can build into existing software frameworks you have built up, the more useful software becomes, rather than a whole lot of disparate functionality, which may be very cute, but the procedures for which can be forgotten by people in the length of time it takes to wander up the hallway with the mobile phone attached to one&#8217;s cranium (would the Queen do this?!).<\/p>\n<p>So <a target=_blank title='Get the weather' href='#agwhgpt'>yesterday&#8217;s<\/a> <i>&#8220;Get the Weather&#8221;<\/i> functionality has a geographical component, that is for sure &#8230; the <i>&#8220;where&#8221;<\/i> in life is soooo programmable, isn&#8217;t it? &#8230; so we can integrate it into other Geographical software components we&#8217;ve been developing here on this blog.<\/p>\n<p>Part one (of two) of integration tasks is to associate the <i>&#8220;Get the Weather&#8221;<\/i> with a placename in the world.   This is the more obvious integration task and we show two bits of integration to make that happen below.<\/p>\n<p>Here is a new link to some downloadable PHP programming source code explaining changes made specifically for the <i>&#8220;Get the Weather&#8221;<\/i> software component (from tutorial below)  <a target=_blank title='column_chart_diff.php' href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/get_weather.php-GETME\">here<\/a>.<\/p>\n<p>Here is a new link to some downloadable PHP programming source code explaining changes made specifically for the Geographical supervisor of the <i>&#8220;Get the Weather&#8221;<\/i> software component (and others)  <a target=_blank title='column_chart_diff.php' href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/diff.php?one=http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/place_latlong_weather.php-GETME\">here<\/a> &#8230; lots of the changes here involve readiness for the other piece of integration that we will cover at another tutorial <a title='tomorrow' href='#cigwawgt'>tomorrow<\/a>.<\/p>\n<p>And finally here is the <a target=_blank title='Integrating Global Weather into Geographicals Tutorial' href=\"http:\/\/www.rjmprogramming.com.au\/PHP\/Geographicals\/place_latlong.php\">live run<\/a> to test all the integration (which now includes <i>&#8220;Get the Weather&#8221;<\/i>)  yourself.<\/p>\n<hr \/>\n<p id='agwhgpt'>Previous relevant <a target=_blank title='' href='http:\/\/www.rjmprogramming.com.au\/wordpress\/?p=5791'>Ajax Global Weather HTTP Get Primer Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/get_weather.php\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"Ajax Global Weather HTTP Get Primer Tutorial\" id='aacpti' src=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/GlobalWeather.jpg\" title=\"Ajax Global Weather HTTP Get Primer Tutorial\" \/><\/a><p class=\"wp-caption-text\">Ajax Global Weather HTTP Get Primer Tutorial<\/p><\/div>\n<p>Ajax techniques make your web pages very dynamic and useful, and there will be fewer changes of webpage required when using Ajax, because information derived from a data source (maybe a feed, maybe a database read, maybe a local source of data, maybe a web service website (as for this tutorial &#8230; thanks to <a target=_blank title='great help' href='http:\/\/www.webservicex.net\/globalweather.asmx?op=GetWeather'>GlobalWeather<\/a> here)) make many changes of webpage obsolete.<\/p>\n<p>Today we use HTTP Get methods to procure the data, but you will see other methods that can be used on that link above.<\/p>\n<p>Let&#8217;s have a look at Wikipedia&#8217;s thoughts on Ajax <a target=_blank title='Ajax information from Wikipedia' href='http:\/\/en.wikipedia.org\/wiki\/Ajax_%28programming%29'>below<\/a>.<\/p>\n<blockquote>\n<p>Ajax (also AJAX; \/\u02c8e\u026ad\u0292\u00e6ks\/; an acronym for Asynchronous JavaScript and XML)[1] is a group of interrelated web development techniques used on the client-side to create asynchronous web applications. With Ajax, web applications can send data to, and retrieve data from, a server asynchronously (in the background) without interfering with the display and behavior of the existing page. Data can be retrieved using the XMLHttpRequest object. Despite the name, the use of XML is not required (JSON is often used instead. See AJAJ), and the requests do not need to be asynchronous.[2]<\/p>\n<p>Ajax is not a single technology, but a group of technologies. HTML and CSS can be used in combination to mark up and style information. The DOM is accessed with JavaScript to dynamically display, and allow the user to interact with, the information presented. JavaScript and the XMLHttpRequest object provide a method for exchanging data asynchronously between browser and server to avoid full page reloads.<\/p>\n<\/blockquote>\n<p>Have a look at the PHP downloadable code which you could rename to <a target=_blank title='get_weather.php' href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/get_weather.php_GETME\">get_weather.php<\/a><br \/>\nTry a <a target=_blank title='live run' href=\"http:\/\/www.rjmprogramming.com.au\/HTMLCSS\/get_weather.php\">live run<\/a> here.<\/p>\n<hr \/>\n<p d='xapwt'>Previous relevant <a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/wordpress\/?p=579\" title='Ajax Preview Window Tutorial'>Ajax Preview Window Tutorial<\/a> is shown below.<\/p>\n<div style=\"width: 230px\" class=\"wp-caption alignnone\"><a target=_blank href=\"http:\/\/www.rjmprogramming.com.au\/ajax.php\"><img decoding=\"async\" style=\"float:left; border: 15px solid pink;\" alt=\"Ajax Preview Window Tutorial\" src=\"http:\/\/www.rjmprogramming.com.au\/Ajax\/Ajax.jpg\" title=\"Ajax Preview Window Tutorial\" \/><\/a><p class=\"wp-caption-text\">Ajax Preview Window Tutorial<\/p><\/div>\n<p>Ajax is a client-side meets server-side melding of PHP (or <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/wordpress\/?p=1646'>ASP.Net<\/a>) and Javascript and HTML and CSS and allows you to stay on the web page you are on doing many more things, rather than constantly changing web pages the way that HTML form tag makes you do.  Ajax works with XMLHttpRequest object to quiz the server-side while staying on the client side.   You may have guessed that we have been working up to this, and I refer you to the previous tutorial about <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/wordpress\/?p=574'>JavaScript and the DOM Tutorial<\/a> and <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/wordpress\/?p=550'>PHP + JavaScript + HTML Primer Tutorial<\/a> for important information to learn before tackling Ajax.   Ajax shares similar restrictions to iFrames in limiting you to work within your own domain, generally speaking.   Ajax normally makes use of the onmouseover (hence the amateurish added rendition of a cursor, where I was hovering over the option tag, but couldn&#8217;t take a snapshot of this &#8230; ie. too lazy to get the camera!) and onmouseout events of HTML elements and you may notice the less than ideal Internet Explorer behaviour for this Ajax code, and that is because for Internet Explorer the option tag has no onmouseover nor onmouseout event defined, so we did an awful kludge.<\/p>\n<p><strong>Earlier tutorials &#8230; <\/strong><\/p>\n<p>JavaScript is a tremendous web client-side language to learn.   You may have heard of a server-side JavaScript, but this tutorial only deals with client-side work.   This tutorial builds a JavaScript layer on top of the <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/wordpress\/?p=550'>PHP tutorial<\/a> made earlier, showing how the DOM can be used to change the look of your webpage dynamically, even if most of it is in an iFrame (but there are limits).<\/p>\n<p>PHP is a wonderful language to learn.   It is usually associated with being a web server-side language (as with this tutorial, where it is being shown on a local <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/wordpress\/?p=532'>MAMP<\/a> web server) but can be a <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/wordpress\/?p=262'>command line tool<\/a> as well.   If you like PHP you may eventually like <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/wordpress\/?p=482'>ASP.Net<\/a> and\/or Python, and vice versa.   It has sophisticated data structures, Object Oriented (the thinking that you can build classes with data and methods which define objects created as you run the program &#8230; eg. you might write a class for book and have data members for things like numPages and publisher, author, creationDate and have methods called things like getCreationDate, setCreationDate, getAuthor, setAuthor allowing the user to use these methods rather than changing the  data members themselves &#8230; heaven forbid that!) code concepts, and really combines well with <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/wordpress\/?p=293'>JavaScript<\/a> (as a client-side language).     <\/p>\n<p>Download programming source code and rename to <a target=_blank href='http:\/\/www.rjmprogramming.com.au\/Ajax\/ajax.php_GETME'>ajax.php<\/a> (but Ajax only works within the domain you use it, and this code mentions www.rjmprogramming.com.au so just use it for reference purposes or rewrite for purposes that suit you within your domain of interest).<\/p>\n<p>Regarding this  <a target=_blank title='click picture' href='http:\/\/www.rjmprogramming.com.au\/ajax.php'>topic<\/a> I really like <em>&#8220;JavaScript &amp; Ajax&#8221; seventh edition by Tom Negrino and Dori Smith<\/em> <\/p>\n<p><strong><em>Did you know &#8230;<\/em><\/strong><br \/>\nJavaScript makes a great easy-access Calculator?<\/p>\n<p>Try typing the lines below into the address bar of your favourite browser:<\/p>\n<p>Javascript: eval(512 \/ 380);<br \/>\nJavascript: eval(512 * 380);<br \/>\nJavascript: eval(512 &#8211; 380);<br \/>\nJavascript: eval(512 + 380);<br \/>\nJavascript: eval(512 % 380);<\/p>\n<p>These days we spend so much time on the Internet it is a much quicker way to get to a calculator!\n<\/p>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d579' onclick='var dv=document.getElementById(\"d579\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"http:\/\/www.rjmprogramming.com.au\/wordpress\/?cat=63\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d579' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr \/>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d5791' onclick='var dv=document.getElementById(\"d5791\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"http:\/\/www.rjmprogramming.com.au\/wordpress\/?cat=63\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d5791' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr \/>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d5798' onclick='var dv=document.getElementById(\"d5798\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"http:\/\/www.rjmprogramming.com.au\/wordpress\/?s=Geographicals\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d5798' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr \/>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d5807' onclick='var dv=document.getElementById(\"d5807\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"http:\/\/www.rjmprogramming.com.au\/wordpress\/?s=Geographicals\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d5807' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr \/>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d6251' onclick='var dv=document.getElementById(\"d6251\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"http:\/\/www.rjmprogramming.com.au\/wordpress\/?s=Webservice\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d6251' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n<hr>\n<p>If this was interesting you may be interested in <a title='Click here to see topics in which you might be interested' href='#d64185' onclick='var dv=document.getElementById(\"d64185\"); dv.innerHTML = \"&lt;iframe width=670 height=600 src=\" + \"https:\/\/www.rjmprogramming.com.au\/ITblog\/tag\/emoji\" + \"&gt;&lt;\/iframe&gt;\"; dv.style.display = \"block\";'>this<\/a> too.<\/p>\n<div id='d64185' style='display: none; border-left: 2px solid green; border-top: 2px solid green;'><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Today, we&#8217;re changing the primary interfacing mode of Change the Weather Tutorial&#8216;s Distance via Geographicals web application &#8230; from trying to interface to Weather APIs &#8230; to interfacing to the Google Charts Geo Chart, via an emoji button &#127760; hover &hellip; <a href=\"https:\/\/www.rjmprogramming.com.au\/ITblog\/distance-interfacing-to-google-chart-geo-chart-tutorial\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,14,37],"tags":[199,1727,385,1619,519,587,1577,3695,652,932,997,1319,1345],"class_list":["post-64185","post","type-post","status-publish","format-standard","hentry","category-elearning","category-event-driven-programming","category-tutorials","tag-chart","tag-distance","tag-emoji","tag-geo-chart","tag-google-charts","tag-iframe","tag-interface","tag-interfacing","tag-javascript","tag-php","tag-programming","tag-tutorial","tag-url"],"_links":{"self":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/64185"}],"collection":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/comments?post=64185"}],"version-history":[{"count":10,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/64185\/revisions"}],"predecessor-version":[{"id":64195,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/posts\/64185\/revisions\/64195"}],"wp:attachment":[{"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/media?parent=64185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/categories?post=64185"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rjmprogramming.com.au\/ITblog\/wp-json\/wp\/v2\/tags?post=64185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}