The true cost of Public Spaces

Is there a relationship between Manhattan’s most expensive buildings and POPS that are not in compliance of their design regulations?

A 2016 audit revealed that over half of New York’s ‘Privately Owned Public Spaces’ are not in compliance of design regulations. These POPS were created to add public space into New York’s urban grid in exchange for more FAR and therefore more revenue. However, after building their expensive buildings, developers are not keeping their share of the bargain. Trump Tower’s contended bench is the most publicized example but far from the only one. My project investigates the relationship between POPS that were built after 1990 and lower Manhattan’s highest valued properties (only those over 20 stories and over $2 million are shown).


Data Sources

Property values: https://data.cityofnewyork.us/Housing-Development/Property-Valuation-and-Assessment-Data/rgy2-tti8

POPS audit: https://comptroller.nyc.gov/wp-content/uploads/documents/SR16_102A.pdf

POPS build date and address: https://data.cityofnewyork.us/Housing-Development/Privately-Owned-Public-Spaces/fum3-ejky

Method

import spatialpixel.mapping.slippymapper as slippymapper
import csv
def setup():
size(800,1000)

global img
img = loadImage("mark.png")

global nyc
nyc = slippymapper.SlippyMapper(40.74, -73.974448, 13, 'toner-lite', width, height)

with open("2011Values.csv") as f:
reader = csv.reader(f)
header = reader.next() # Skip the header row.

global landvalue
landvalue = []
global longitude
longitude = []
global latitude
latitude = []

for row in reader:
landvaluesingle = float(row[7])
landvalue.append(landvaluesingle)

longs = float(row[12])
longitude.append(longs)

lats = float(row[11])
latitude.append(lats)

with open("pops1990withComp.csv") as f:
reader = csv.reader(f)
header = reader.next() # Skip the header row.
global longitudep
longitudep = []
global latitudep
latitudep = []
global compliance
compliance = []

for row in reader:
longsp = float(row[3])
longitudep.append(longsp)

latsp = float(row[2])
latitudep.append(latsp)

compli = str(row[6])
compliance.append(compli)

nyc.render()
def draw():
background(255)
nyc.draw()

for i in range(len(landvalue)):
landvaluesingle = landvalue[i]
lengthofline = (landvaluesingle/1000000)
longs = longitude[i]
lats = latitude[i]
x = nyc.lonToX(longs)
y = nyc.latToY(lats)
strokeWeight(4)
stroke(255,0,255)
line(x, y, x, y-lengthofline)
stroke(0)
fill(0)
textSize(7)
#text("$", x-10, y-lengthofline-5)
text('$'+ str(int(landvaluesingle)/1000000)+'M', x-5, y-lengthofline-5)

for m in range(len(longitudep)):
longsp = longitudep[m]
latsp = latitudep[m]
question = compliance[m]
x = nyc.lonToX(longsp)
y = nyc.latToY(latsp)
noStroke()

if (mouseX>50 and mouseX<200 and mouseY>50 and mouseY<130):
if compliance[m] == 'No':
fill(0,0,255)
image(img,x-10,y-10,20,20)
else:
fill(0,0,255)
ellipse(x, y, 12, 12)
else:
fill(0,0,255)
ellipse(x, y, 12, 12)

fill(0)
rect(50, 50, 150, 50)
textSize(11)
stroke(255)
fill(255)
text("But are they compliant?", 60, 80)
save('map1.tif')