enTaxr[nj] - Tax Maps of New Jersey New Jersey Geospatial Forum 6 June 2014 www.wrwetzel.com/Cartography Bill Wetzel carto@wrwetzel.com Motivation / Trajectory • Wanted convenient access property data for specific parcels & explore neighborhoods • Browsing difficult, search not forgiving in Open Public Records. QGIS, ArcGIS don’t scale. • Initial target was Google Earth, KML files containing property data, awkward user interface • Maps followed from generated shapefiles and property class, assessment data • Move to Google Maps for intuitive user interface Results • Intuitive, graphical geospatial index to property data through Google Maps • Property data for 3,441,254 parcels in 565 towns in NJ • Maps for 21 counties and 565 towns • Error and mismatch logs for 565 towns • Tools for automatic generation of property data files and maps Governor’s House Fundamentals • Municipality, not tile, is basic unit of locality • Fully automatic processing, no manual steps with gui-based GIS tools • Most work in EPSG:3424 (NAD 83/ NJ) projection. Convenient to work in feet. • Re-project to EPSG:4326 (WGS 84) for KML files Munis Index Map • All 565 municipalities • Zoom and click on municipality • Curiosities – diagonal line from Readington Township to Little Egg Harbor – must be a story Counties Index Map • 21 counties • Click on county or text in sidebar Mercer County Index Map • Click on municipality • All index maps semi-transparent to show town names on map Trenton Parcels Index Map • Zoom in, click on parcel • Parcels index on satellite view • Large municipalities split into sections • Google Maps limitation, 1000 parcels per KML file, about 14 KML files per section • Navigate with Prev/Next 300 Riverview Plaza, Trenton • Search Box on Parcels Index • Search only meaningful within current municipality • Hide / Show parcels layer • Legend – show legend on sidebar • Parcels Index over satellite view • County / Munis Index over street view Nearby Area • Parcels colored by property class • Residential, commercial, industrial muted • Exempt, vacant, farms and others less muted Property Class Map – Rumson • All maps to consistent scale • 10 feet /pixel - most • 5 feet / pixel – Monmouth • Space limits of web host Assessment Map - Rumson • Colored blue to red • 21 Steps of $150,000 • $0.0 to $3,000,000 and up • Exempt – light gray • No data – dark gray • High assessed value of exempt parcels confounded map •Tax map almost identical, not included here Property Class Map - Rumson • Class ID shown in parcel • Same coloring as parcels on Google Maps • Coastline identified and colored • Follows from early interest in identifying waterfront property • Intersection of parcel with buffered coastline • Waterfront parcels no longer marked • Road style of secondary importance Assessment Map - Rumson • Assessment shown on edge of parcel if possible • Intent is qualitative heat map Assessment Map – Monmouth County • Property Class & Assessment maps for all 21 counties State Table Index • Alternate to index maps • Thumbnail links to maps • KML files • County table and graphical index • Graphs are experimental, have rough edges, not discussed further here County Table Index • Thumbnail links to property class and assessment maps, (property tax maps for Monmouth) • Parcels graphical index • Error log • pams_pin mismatch log Inputs - Property Data • Mod-IV assessment data • SR-1A sales data Inputs - GIS Shapefiles • • • • • • Municipal parcels by county - NJ County & municipal outlines - NJ State coastline - NJ Streets – Open Street Maps Place names – Open Street Maps Parcels, coastline, street places all clipped to municipal outlines Data Quality • Non-numeric where numeric expected • Non-ASCII characters – 0xAC in “Ponce, Luis J-Ces*edes” in Rahway – Null character • Property Class – clean, not validated • Non-Usable Code – oh/zero, spaces, decimal points, some correctable • Few parcels mislabeled – apparent on maps • Curiosities - One parcel in Wrightstown lies within New Hanover • Winding direction of polygons/holes in shapefiles slightly inconsistent Common Errors Error Count Duplicate pams_pin 6981 Invalid recorded date 00-00-0000 289 Undefined numeric non-usable code 103 Incorrect field count in record 56 Non-numeric non-usable code 23 Pams_pin has insufficient parts 18 Overall, given 3,441,254 parcels, data is remarkably clean pams_pin • Critical field – join parcel shapefile with property data, no data to display if mismatch • Typos – leading zero, extra decimal point • Assessor creativity – non-numeric in block/lot number: 0904_1_2.B, 0904_189.A_29.A • Inconsistent use of qcode field • Systemic errors – temporal misalignment, lot renumbering, missing updates, duplication, missing qcodes pams_pin Correction Heuristics • Remove qcode – 14,126 • Remove leading zero from lot number - 7527 • Add leading zero to lot number - 1835 pams_pin Mismatch Rate • Almost classic 80/20 rule – 16% of towns have 80% of the mismatches Other Errors • Log scale used because of large range of error counts. Zeroerror-count data points are not shown. • 387 towns have no errors • Jersey City has 6599 errors from duplication Questions / Plea to Assessors and the GIS Community • Are lists of errors and mismatches in one place for all municipalities helpful? • Has anyone done it before? Does anybody care? • If so, how disseminate the lists to assessors or others for correction? • How validate errors, especially qcode issues? • Assessors – please look at Error Log on the website and correct the errors, if any, for your town’s property data. Development Environment • • • • • • • Linux Mint, Python, JavaScript Pyshp – shapefile processing Pyproj – projection translation Shapely – intersections, buffers Simplekml – KML file creation Mapnik – map production Pandas, numpy, matplotlib – limited use Future Direction • Move property data from KML file to database • Add generalized search over property data • Add other maps – zoning, hazard (flood and toxic areas), census data • Add error summaries • Explore GDAL/OGR library • Find market for project