<!DOCTYPE html>
<html>
  <head>
    <title>CARTO.js | Get GeoJSON from selected feature</title>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <link rel="shortcut icon" href="http://cartodb.com/assets/favicon.ico" />
    <style>
      html, body, #map {
        height: 100%;
        padding: 0;
        margin: 0;
      }
      #infobox{
        width: 325px;
        height: 110px;
        position: absolute;
        top: 20px;
        left: 20px;
        background-color: white;
        opacity: 0.6;
        text-align: center;
        font-family: "Open Sans";
      }
    </style>
    <link rel="stylesheet" href="https://cartodb-libs.global.ssl.fastly.net/cartodb.js/v3/3.15/themes/css/cartodb.css" />
  </head>
  <body>

  <div id="map"></div>

  <!-- infobox div -->
  <div id="infobox">
    <h4>Click on a UK region</h4>
    <p id="region">UK region</p>
  </div>

  <script type="text/sql" id="query">
    SELECT 
      *
    FROM 
      uk_administrative_regions
  </script>

  <script type="text/cartocss" id="style">
    #layer {
        polygon-opacity: 0.5;
        polygon-fill: ramp([region], cartocolor(Bold), category(10));
        line-width: 2;
        line-color: ramp([region], cartocolor(Bold), category(10));
        line-opacity: 0.4;
        line-offset: -1;
    }
  </script>
    
    <!-- include cartodb.js library -->
    <script src="https://cartodb-libs.global.ssl.fastly.net/cartodb.js/v3/3.15/cartodb.js"></script>

    <script>
      function main() {

        var query = $("#query").text(),
            style = $("#style").text();
            

        var map = new L.Map('map', {
          zoomControl: false,
          center: [54, -3],
          zoom: 6
        });

        L.tileLayer('http://{s}.basemaps.cartocdn.com/light_nolabels/{z}/{x}/{y}.png', {
          attribution: 'CARTO'
        }).addTo(map);

        cartodb.createLayer(map, {
            user_name: 'ramirocartodb',
            type: 'cartodb',
            sublayers: [{
              sql: query,
              cartocss: style
            }]
        })
         .addTo(map)
         .on('done', function(layer) {

          var sublayer = layer.getSubLayer(0); 

          // change cursor to pointer when hovering on a feature
          sublayer.on('mouseover',function(){
            $('#map').css({"cursor":"pointer"})
          });

          // set layer interactivity
          sublayer.setInteractivity("cartodb_id");
          sublayer.setInteraction(true);

          sublayer.on('featureClick', function(e, pos, latlng, data) {

            // get cartodb_id from selected feature
            var id_selected = data.cartodb_id;

            var sql = new cartodb.SQL({ user: 'ramirocartodb'});

            // get region from selected cartodb_id
            sql.execute(" SELECT region FROM uk_administrative_regions WHERE cartodb_id = {{cartodb_id}}", {cartodb_id: id_selected})
            .done(function(data) {
              var region = data.rows[0].region;
              console.log(region);
              $('#region').text(region);

              // get GeoJSON
              sql.execute(" SELECT ST_AsGeoJSON(ST_Union(the_geom)), region FROM uk_administrative_regions WHERE region = '{{region}}' GROUP BY region", {region: region}).done(function(data) {
                var geoJSON = data.rows[0];
                console.log(geoJSON);

              });
            });

          });

        }).on('error', function() {
          cartodb.log.log("Some error occurred.");
        });
      }

      // you could use $(window).load(main);
      window.onload = main;
    </script>
  </body>
</html>