Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 55 additions & 2 deletions js/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,57 @@ function toTitleCase(str){
return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
}

function appendPropertyData(addr) {
var url = '/opa-api-wrapper.php/address/' + addr;
var data = $.ajax(url, {
// dataType: 'jsonp',
// jsonpCallback: 'json_callback',
success: function (res) {
res = jQuery.parseJSON(res);
// the property listing from api.phillyaddress is loaded with information.
// At this point i'm only interested in assessed value per square foot,
// but there's loads more data here that could be included in the listing.
var property = res.property.account_details;
var tax = res.property.valuation_details;
var land_sqft = parseFloat(property.land_area.replace(' SqFt', ''));
var bldg_sqft = parseFloat(property.improvement_area.replace(' SqFt', ''));
var land_ass_2013 = parseInt(tax[2013].assessed_land_exempt.replace(/[$,]/gi, '')) + parseInt(tax[2013].assessed_land_taxable.replace(/[$,]/gi, ''));
var land_ass_2014 = parseInt(tax[2014].assessed_land_exempt.replace(/[$,]/gi, '')) + parseInt(tax[2014].assessed_land_taxable.replace(/[$,]/gi, ''));
var bldg_ass_2013 = parseInt(tax[2013].assessed_improvement_exempt.replace(/[$,]/gi, '')) + parseInt(tax[2013].assessed_improvement_taxable.replace(/[$,]/gi, ''));
var bldg_ass_2014 = parseInt(tax[2014].assessed_improvement_exempt.replace(/[$,]/gi, '')) + parseInt(tax[2014].assessed_improvement_taxable.replace(/[$,]/gi, ''));

var land_sqft_2013 = Math.floor(land_ass_2013 / land_sqft);
var land_sqft_2014 = Math.floor(land_ass_2014 / land_sqft);
var bldg_sqft_2013 = Math.floor(bldg_ass_2013 / bldg_sqft);
var bldg_sqft_2014 = Math.floor(bldg_ass_2014 / bldg_sqft);
var land_delta = 0;
var bldg_delta = 0;

land_delta = Math.floor((land_sqft_2014 / land_sqft_2013) * 100);
if (land_sqft_2013 > land_sqft_2014) {
land_delta = -(100 - land_delta);
}

bldg_delta = Math.floor((bldg_sqft_2014 / bldg_sqft_2013) * 100);
if (bldg_sqft_2013 > bldg_sqft_2014) {
bldg_delta = -(100 - bldg_delta);
}
$('#tooltip #opa-data-container').html(
'<strong>OPA Data</strong>' +
'<br>improvement area: ' + property.improvement_area +
'<br>land area: ' + property.land_area +
'<br>2013 improvement value / sqft: $' + bldg_sqft_2013 +
'<br>2014 improvement value / sqft: $' + bldg_sqft_2014 +
'<br>% change: ' + bldg_delta + '%' +
'<br>2013 land value / sqft: $' + land_sqft_2013 +
'<br>2014 land value / sqft: $' + land_sqft_2014 +
'<br>% change: ' + land_delta + '%'
);
}
});
$('#tooltip').append('<br><span id="opa-data-container">acquiring OPA data...</span>');
}

// Create the map
app.initMap = function(callback) {
var mapSettings = app.mergeMapSettings();
Expand All @@ -55,10 +106,12 @@ app.initMap = function(callback) {
"2013 Tax: $" + Number(o.data.tx_2013).formatMoney() + "<br>" +
"2014 Market Value: $" + Number(o.data.mktval_14).formatMoney() + "<br>" +
"2014 Tax: $" + Number(o.data.tx_2014).formatMoney() + "<br>" +
"Change in Tax: " + Number(o.data.tax_change * 100).toFixed(0) + '%';
"Change in Tax: " + Number(o.data.tax_change * 100).toFixed(0) + '% ' + // Append property data on a time callback, so that we're not hammering the data api server:
'<script type="text/javascript">clearTimeout(app.myInterval); app.myInterval = setTimeout(function() { appendPropertyData("' + o.data.address + '") }, 1000); </script>';


if ($('#tooltip').length) {
window.clearTimeout(mapSettings.myTimeout);
$('#tooltip').html(contents).show();
} else {
$('<div/>', {
Expand All @@ -71,7 +124,7 @@ app.initMap = function(callback) {

$(document).mousemove(function(e){
var posX = e.pageX - offset.left - 130;
posY = e.pageY - offset.top - 150;
posY = e.pageY - offset.top - 300;

$('#tooltip').css({ left: posX, top: posY });
});
Expand Down
15 changes: 15 additions & 0 deletions opa-api-wrapper.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php
// Quick and dirty cross-domain workaround for api.phillyaddress.com server.
$request = $_SERVER['REQUEST_URI'];
$request = str_replace('/opa-api-wrapper.php', 'http://api.phillyaddress.com/', $request);
if (!function_exists('curl_init')){
die('Sorry cURL is not installed!');
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $request);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$output = curl_exec($ch);
curl_close($ch);
echo $output;