Skip to content

Instantly share code, notes, and snippets.

@wboykinm
Last active December 26, 2015 19:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wboykinm/7199247 to your computer and use it in GitHub Desktop.
Save wboykinm/7199247 to your computer and use it in GitHub Desktop.
ACA QHP demo
<!DOCTYPE HTML>
<html>
<head>
<style>
html, body {width:100%; height:100%; padding: 0; margin: 0;}
#map {width: 100%; /*height:100%;*/ position: absolute; top: 40px; bottom: 0px; background: black; z-index:1;}
div.cartodb-popup div.cartodb-popup-content {max-height:none | inherit}
#footer {
position:absolute;
bottom:0px;
left:0px;
right:0px;
background:#fff;
z-index:999;
overflow:auto;
/*height:160px;*/
padding:5px;
opacity:0.9;
}
h2{color:#fff;}
.leaflet-container .leaflet-control-zoom {margin-top:55;}
ul.inline > li, ol.inline > li {
display: inline-block;
padding-right: 5px;
padding-left: 5px;
}
</style>
<link rel="stylesheet" href="http://libs.cartocdn.com/cartodb.js/v2/themes/css/cartodb.css" />
<!--[if lte IE 8]>
<link rel="stylesheet" href="http://libs.cartocdn.com/cartodb.js/v2/themes/css/cartodb.ie.css" />
<![endif]-->
<!-- NOTE WE'RE USING A BOOTSWATCH THEME INSTEAD OF BOOTSTRAP STANDARD-->
<link href="http://netdna.bootstrapcdn.com/bootswatch/2.3.2/cerulean/bootstrap.min.css" rel="stylesheet">
<!--HERE YOU CAN CUSTOMIZE THE POPUP INFOWINDOW WITH DATA FROM YOU SOURCE TABLE; VARIABLES IN THE MUSTACHE TAGS-->
<script type="infowindow/html" id="infowindow_template">
<div class="cartodb-popup">
<a href="#close" class="cartodb-popup-close-button close">x</a>
<div class="cartodb-popup-content-wrapper">
<div class="cartodb-popup-content">
<!-- 'content.data.whatever' CONTAINS THE FIELD DATA, THE REST IS HTML -->
<h4 style="color:#333;">Census Block #{{content.data.geoid}}</h4><hr>
<p>Median Age Change, 1990-2010</p>
<img src="http://chart.googleapis.com/chart?chf=bg,s,67676700&chxl=0:|1990|2000|2010&chxp=0,10,50,90&chxr=0,0,105&chxs=0,676767,10.5,0,l,676767&chxt=x&chs=200x100&cht=ls&chco=0000FF&chds=19,57&chd=t:{{content.data.med_age_90}},{{content.data.med_age_00}},{{content.data.med_age_10}}&chdlp=b&chg=-1,0&chls=3&chma=5,5,5,5|5"/>
<hr>
</div>
</div>
<div class="cartodb-popup-tip-container"></div>
</div>
</script>
</head>
<body onload="init()">
<!--ADD THE MAP ELEMENT-->
<div id='map'></div>
<!--SOME BOOTSTRAP NAV BOILERPLATE TO MAKE THINGS SIMPLE AND APPEALING-->
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="brand">ACA Qualified Health Plans</a>
<ul class="nav">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><small><i class="icon-user icon-white"></i> Coverage Type <b class="caret"></b></small></a>
<ul class="dropdown-menu">
<li><a class="coverage active" href="#" id="premium_adult_individual_age_27">Adult, 27-50</a></li>
<li><a class="coverage" href="#" id="premium_adult_individual_age_50">Adult, 50+</a></li>
<li><a class="coverage" href="#" id="premium_family">Family</a></li>
<li><a class="coverage" href="#" id="premium_single_parent_family">Single-Parent Family</a></li>
<li><a class="coverage" href="#" id="premium_couple">Couple</a></li>
<li><a class="coverage" href="#" id="premium_child">Child</a></li>
</ul>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><small><i class="icon-download icon-white"></i> Download <b class="caret"></b></small></a>
<ul class="dropdown-menu">
<li><a id="downkml" href="#" target="_blank">KML</a></li>
</ul>
</li>
<!--TRIGGERS A MODAL WINDOW WITH ALL YOUR EXPLANATORY INFORMATION; NICE TO HAVE HIDDEN MOST OF THE TIME-->
<!--<li><a href="#myModal" role="button" class="pull-right" data-toggle="modal"><small>About</small></a></li>-->
</ul>
</div>
</div>
</div>
<div class="container-narrow">
<!--MODAL POPUP CONTENT-->
<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="myModalLabel">About</h3>
</div>
<div class="modal-body">
<p>This page is a demonstration of a theme-specific, easily-replicated public portal for open geodata. More details on the project are <a href="http://geosprocket.blogspot.com/2013/04/toward-ideal-geoportal.html" target="_blank">available here.</a></p>
<hr>
<!--HACKTASTIC CATEGORICAL LEGEND-->
<p><strong>Zoning Categories</strong></p>
<ul class="unstyled">
<li><a style='background:#f6e03f;'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>&nbsp;Enterprise</li>
<li><a style='background:#adbd06;'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>&nbsp;Institutional</li>
<li><a style='background:#cfc8a2;'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>&nbsp;Mixed Use</li>
<li><a style='background:#f6f7bd;'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>&nbsp;Registered Community Organizations</li>
<li><a style='background:#895793;'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>&nbsp;Residential</li>
<li><a style='background:#de3f33;'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>&nbsp;Urban Reserve</li>
</ul>
<p><small>Buildings and zoning data provided by <a href="http://burlingtonvt.gov/" target="_blank">the City of Burlington</a> and <a href="http://www.openstreetmap.org/?lat=44.48026&lon=-73.21476&zoom=15&layers=M" target="_blank">Openstreetmap Contributors</a></small></p>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
</div>
</div>
<div id="footer">
<div class="container">
<ul class="inline">
<li><h2 class="switch-title">Plan Premiums by County: Adult, 27-50 </h2></li>
<li class="divider"></li>
<!--<li><img src="img/legend1.png"/> </li>-->
</ul>
</div>
</div>
</body>
<script>
//WRAP THE MAP ACTION
var map;
function init() {
// INITIATE LEAFLET MAP
map = new L.Map('map', {
center: [40, -90],
zoom: 4,
minZoom: 2,
maxZoom: 14
});
//CALL SOME COMPELLING MAPBOX TILES AS A BASE
L.tileLayer('http://a.tiles.mapbox.com/v3/landplanner.map-sa4pz9ny/{z}/{x}/{y}.png', {
attribution: '<a href="http://mapbox.com/about/maps/" target="_blank">w/ Mapbox</a>'
}).addTo(map);
//DEFINE A REFERENCE OVERLAY TO PLACE ON TOP OF THE BUILDINGS:
var reference = L.tileLayer('http://a.tiles.mapbox.com/v3/landplanner.map-6loa9k8g/{z}/{x}/{y}.png');
//GIVE CARTODB THE PARAMETERS OF YOUR TABLE BY VIZ.JSON -
var current_coverage = $('.coverage.active').attr('id');;
var layerUrl = 'http://geosprocket.cartodb.com/api/v1/viz/qhp_individual_medical_landscape_102513a/viz.json';
var layerOptions = {
query: "SELECT * FROM {{table_name}} WHERE " + current_coverage + "> 0 ORDER BY "+ current_coverage + " DESC",
tile_style: "Map{buffer-size:512;}#{{table_name}}{[zoom<=5]{marker-width:10;}[zoom>5][zoom<=6]{marker-width:20;}[zoom>6]{[metal_level='Platinum']{marker-width:50;}[metal_level='Gold']{marker-width:40;}[metal_level='Silver']{marker-width:30;}[metal_level='Bronze']{marker-width:20;}[metal_level='Catastrophic']{marker-width:10;}}}marker-line-width:0.5;marker-line-color:#FFFFCC;marker-line-opacity:0.7;marker-line-gamma:0.5;marker-opacity:0.9;marker-placement:point;marker-type:ellipse;marker-allow-overlap:true;marker-clip:false;marker-fill:#cccccc;marker-multi-policy:each;[" + current_coverage + "<=300]{marker-fill:#FFFFCC;}[" + current_coverage + ">300][" + current_coverage + "<=500]{marker-fill:#A1DAB4;}[" + current_coverage + ">500][" + current_coverage + "<=800]{marker-fill:#41B6C4;}[" + current_coverage + ">800][" + current_coverage + "<=1500]{marker-fill:#2C7FB8;}[" + current_coverage + ">1500]{marker-fill:#253494;}}"
}
//Define layers array so you can put it through a julienne slicer later
var layers = [];
cartodb.createLayer(map, layerUrl, layerOptions)
.on('done', function (layer) {
layer.infowindow.set('template', $('#infowindow_template').html());
map.addLayer(layer);
layers.push(layer);
map.addLayer(reference);
}).on('error', function () {
//log the error
});
function updateQuery() {
layers[0].setOptions ({
query: "SELECT * FROM {{table_name}} WHERE " + current_coverage + "> 0 ORDER BY "+ current_coverage + " DESC",
tile_style: "Map{buffer-size:512;}#{{table_name}}{[zoom<=5]{marker-width:10;}[zoom>5][zoom<=6]{marker-width:20;}[zoom>6]{[metal_level='Platinum']{marker-width:50;}[metal_level='Gold']{marker-width:40;}[metal_level='Silver']{marker-width:30;}[metal_level='Bronze']{marker-width:20;}[metal_level='Catastrophic']{marker-width:10;}}}marker-line-width:0.5;marker-line-color:#FFFFCC;marker-line-opacity:0.7;marker-line-gamma:0.5;marker-opacity:0.9;marker-placement:point;marker-type:ellipse;marker-allow-overlap:true;marker-clip:false;marker-fill:#cccccc;marker-multi-policy:each;[" + current_coverage + "<=300]{marker-fill:#FFFFCC;}[" + current_coverage + ">300][" + current_coverage + "<=500]{marker-fill:#A1DAB4;}[" + current_coverage + ">500][" + current_coverage + "<=800]{marker-fill:#41B6C4;}[" + current_coverage + ">800][" + current_coverage + "<=1500]{marker-fill:#2C7FB8;}[" + current_coverage + ">1500]{marker-fill:#253494;}}"
});
}
var hash = new L.Hash(map);
//THEMATIC FILTER: ACTIVE coverage
//To redraw layers with the coverage attribute passed along
$('.coverage').click(function () {
$('.coverage').removeClass('active');
$(this).addClass('active');
$('h2.switch-title').text("Plan Premiums by County: " + $('.coverage.active').text());
current_coverage = $(this).attr('id');
updateQuery();
});
//KML FORMAT,
$('#downkml').click(function () {
//NOTE THAT THIS IS AN ENCODED SQL STRING IN A URL. BEST THING EVER.
var new_sql = "http://geosprocket.cartodb.com/api/v2/sql?q=SELECT%20*%20FROM%20btv_bg_90_10&format=csv";
$(this).attr("href", new_sql);
});
}
</script>
<!--libraries kept to a minimum. Bootstrap could be used a la carte here, but I'm being lazy-->
<script src="http://libs.cartocdn.com/cartodb.js/v2/cartodb.js"></script>
<script src="http://netdna.bootstrapcdn.com/bootstrap/2.3.2/js/bootstrap.min.js"></script>
<script src="http://geosprocket.com/assets/leaflet/leaflet-hash.js"></script>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment