Note @Road is the same as geography MULTILINESTRING
SET INITIAL ROAD SEGMENT
SET @Road = geography::STMLineFromText('MULTILINESTRING ((-79.907603999999992 32.851905999999985, -79.907708999999983 32.851751, -79.907879999999992 32.851555999999995, -79.907889999999981 32.851542999999992, -79.907995999999983 32.851461, -79.90813399999999 32.851373999999986, -79.90833499999998 32.851286999999992, -79.908529 32.85121, -79.909110999999982 32.850974))', 4269);
GET START/END POINTS OF ROAD SEGMENT FOR NEW MIDPOINT CALCULATION
SET @x1 = CAST(@Road.STStartPoint().Lat AS decimal(11,6))
SET @y1 = CAST(@Road.STStartPoint().Long AS decimal(12,6))
SET @x2 = CAST(@Road.STEndPoint().Lat AS decimal(11,6))
SET @y2 = CAST(@Road.STEndPoint().Long AS decimal(12,6))
ASSIGN ROAD SEGMENT MIDPOINT LAT/LON
SET @MidPointLat = CAST( ((@x1 + @x2) / 2) AS nvarchar(11))
SET @MidPointLon = CAST( ((@y1 + @y2) / 2) AS nvarchar(12))
SET INITIAL OFF ROAD CENTROID
SET @RoadMidPt = geography::STPointFromText('POINT(' + @MidPointLon + ' ' + @MidPointLat + ')', 4269)
CALCULATE BUFFER DISTANCE BACK TO ROAD FOR .STIntersection (add .02 to ensure intersect)
SET @RoadMidPtBuffer = @RoadMidPt.STBuffer(@RoadMidPt.STDistance(@Road) + .02)
Might intersect at multiple points! Use 1st point that intersects road as centroid
SET @RoadCentroid = @RoadMidPtBuffer.STIntersection(@Road).STPointN(1);
FINAL NEW LAT/LON OF CLOSEST ROAD/LINE CENTROID
SELECT @RoadCentroid.Lat, @RoadCentroid.Long