There are probably a number of ways to do this, depending on the specifics of the data, how they're stored, &c.
The method that first comes to mind is a well-constructed query layer, but this assumes that your parcels and centerlines both reside in the same database. In a postgres DB, it might look something like this:
SELECT
ST_ShortestLine(p.shape, c.shape) line,
MIN(ST_Distance(p.shape, c.shape)) dist,
p.parcel_number
FROM parcels p
JOIN centerlines c on p.streetname = c.streetname
GROUP BY p.parcel_number
You may have to do some tweaking if your attributes aren't exactly alike, and this will vary depending on the SQL database your data is in (if it is in a database, that is).
The output would look something like the image attached to this reply.
Also note that instead of ST_ShortestLine, you could also use ST_ClosestPoint, to get the point on the parcel boundary closest to the associated street, but I find the lines make it clearer. Of course, that only shows you the "front" portion.
As for setbacks, the earlier query already gave us a rough distance to centerline value, so we could adjust the query like so:
SELECT
MIN(ST_Distance(p.shape, c.shape)) dist,
ST_Intersection(p.shape, ST_Buffer(c.shape, ST_Distance(p.shape, c.shape) + p.setback)) setback,
p.parcel_number
FROM parcels p
JOIN centerlines c on p.streetname = c.streetname
GROUP BY p.parcel_number
Doing this, we take the closest centerline, buffer it out by the distance to the parcel, plus the setback distance for that parcel, and return only that portion which intersects with the parcel itself. You can even at an ST_Area() to the query to include the area as an attribute if you like.
The result of this second query is also attached as an image.
I really like using query layers whenever possible for things like this, because the resulting layer is dynamic. You can continue to edit and modify the parcel and centerline layers, and the query layer output will always be based on the current features.
- Josh Carlson
Kendall County GIS