JSTS Buffered Polyline no serviço de rota (google maps V3)

Olá a todos, Não sei se alguém já viveu a mesma coisa que eu, trabalho com a API JSTS para criar um polígono que circunda a rota dos serviços do google mas o problema é que quando há cruzamentos na rota do polígono não pegue a distância fornecida, mas a superfície completa entre as duas estradas, a imagem a seguir [imagem o que eu quero e resultados do problema] explica o problema em detalhes, e aqui está o código usado.
Resultado e o que quer
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script><script src="https://maps.googleapis.com/maps/api/js?sensor=false"></script><script src="http://marocexpress.marocgeo.ovh/modules/trip/js/javascript.util.js"></script><script src="http://marocexpress.marocgeo.ovh/modules/trip/js/jsts.js"></script>

   <div id="map-canvas"></div>
<div id="directions-panel"></div>

<script type="text/javascript">
var mapCanvas = "map-canvas";
var map;
var directionsService = new google.maps.DirectionsService;
var directionsDisplay = new google.maps.DirectionsRenderer;
var mapConfig = {
zoom
: 6,
center
: { lat: 32.082575, lng: -6.921387 },
mapTypeId
: google.maps.MapTypeId.ROADMAP,
mapTypeControlOptions
: {
style
: google.maps.MapTypeControlStyle.DROPDOWN_MENU,
mapTypeIds
: [google.maps.MapTypeId.HYBRID, google.maps.MapTypeId.ROADMAP, google.maps.MapTypeId.SATELLITE, google.maps.MapTypeId.TERRAIN]
},
overviewMapControl
: true,
scaleControl
: true,
streetViewControl
: true,
panControl
: true,
rotateControl
: true,
maxZoomForCenter
:17
};

function initialize() {
map
= new google.maps.Map(document.getElementById(mapCanvas),mapConfig);
directionsDisplay
.setMap(map);
calculateAndDisplayRoute
(directionsService, directionsDisplay);
};

function calculateAndDisplayRoute(directionsService, directionsDisplay) {
var waypts = [];
var checkboxArray = document.getElementById('waypoints');

waypts
.push({
location
: new window.google.maps.LatLng(33.494873,-7.718875),
stopover
: true
});

waypts
.push({
location
: new window.google.maps.LatLng(33.595501,-7.578152),
stopover
: true
});


directionsService
.route({
origin
: new window.google.maps.LatLng(33.563656, -7.636282),
destination
: new window.google.maps.LatLng(33.477188, -7.945458),
waypoints
: waypts,
optimizeWaypoints
: true,
travelMode
: 'DRIVING'
}, function(response, status) {
if (status === 'OK') {
directionsDisplay
.setDirections(response);
var route = response.routes[0];

var legs = response.routes[0].legs;
overviewPath
= response.routes[0].overview_path,
overviewPathGeo
= [];
for (var i = 0; i < legs.length; i++) {
var steps = legs[i].steps;
for (j = 0; j < steps.length; j++) {
var nextSegment = steps[j].path;
for (k = 0; k < nextSegment.length; k++) {
overviewPathGeo
.push(
[nextSegment[k].lng(), nextSegment[k].lat()]
);
}
}
}
bermudaTriangle
= new google.maps.Polygon({
paths
: createPolygon(overviewPathGeo),
fillColor
: '#ff0000',
});
bermudaTriangle
.setMap(map);

var summaryPanel = document.getElementById('directions-panel');
summaryPanel
.innerHTML = '';
// For each route, display summary information.
for (var i = 0; i < route.legs.length; i++) {
var routeSegment = i + 1;
summaryPanel
.innerHTML += '<b>Route Segment: ' + routeSegment +
'</b><br>';
summaryPanel
.innerHTML += route.legs[i].start_address + ' to ';
summaryPanel
.innerHTML += route.legs[i].end_address + '<br>';
summaryPanel
.innerHTML += route.legs[i].distance.text + '<br><br>';
}
} else {
window
.alert('Directions request failed due to ' + status);
}
});
}

createPolygon
= function(overviewPath) {
if(overviewPath && overviewPath.length>= 0){
last_width_long
= 7;
var distance = last_width_long / 1000; //en km.
distance
= (distance / 111.12);
geoInput
= {
type
: "LineString",
coordinates
: overviewPath
};
var geoReader = new jsts.io.GeoJSONReader(),
geoWriter
= new jsts.io.GeoJSONWriter();
var geometry = geoReader.read(geoInput).buffer(distance);
var polygon = geoWriter.write(geometry);
polygon_route
= polygon;

var areaCoordinates = [];
var polygonCoordinates = polygon.coordinates[0];
for (i = 0; i < polygonCoordinates.length; i++) {
var coordinate = polygonCoordinates[i];
areaCoordinates
.push(new google.maps.LatLng(coordinate[1], coordinate[0]));//set latitude a
}
return areaCoordinates;
}else return false;
};
google
.maps.event.addDomListener(window, 'load', initialize);
</script>

</code>