Desidero disegnare un poligono attorno a una polilinea. La polilinea nel mio caso è una direzione di Google Maps e ho bisogno di mostrare un poligono intorno alla tela di Google Maps.Come disegnare un poligono attorno a una polilinea in JavaScript?
Primo:
Per compensare io uso il Clipper libreria JavaScript. Ho la seguente polilinea (percorso): eseguo un poligono offset sotto usando Clipper:
Ho un funzionamento JS Bin example.
Il codice è:
<html>
<head>
<title>Javascript Clipper Library/Offset polyline</title>
<script src="clipper.js"></script>
<script>
function draw() {
var polygons = [[{"X":72,"Y":59.45},{"X":136,"Y":66},{"X":170,"Y":99},{"X":171,"Y":114},{"X":183,"Y":125},{"X":218,"Y":144},{"X":218,"Y":165},{"X":226,"Y":193},{"X":254,"Y":195},{"X":283,"Y":195},{"X":292,"Y":202},{"X":325,"Y":213},{"X":341,"Y":234},{"X":397,"Y":245},{"X":417,"Y":248}]];
var scale = 100;
reverse_copy(polygons);
polygons = scaleup(polygons, scale);
var cpr = new ClipperLib.Clipper();
var delta = 25;
var joinType = ClipperLib.JoinType.jtRound;
var miterLimit = 2;
var AutoFix = true;
var svg, offsetted_polygon,
cont = document.getElementById('svgcontainer');
offsetted_polygon = cpr.OffsetPolygons(polygons, delta * scale, joinType, miterLimit, AutoFix);
//console.log(JSON.stringify(offsetted_polygon));
// Draw red offset polygon
svg = '<svg style="margin-top:10px;margin-right:10px;margin-bottom:10px;background-color:#dddddd" width="540" height="340">';
svg += '<path stroke="red" fill="red" stroke-width="2" stroke-opacity="0.6" fill-opacity="0.2" d="' + polys2path(offsetted_polygon, scale) + '"/>';
//Draw blue polyline
svg += '<path stroke="blue" stroke-width="3" d="' + polys2path(polygons, scale) + '"/>';
svg += '</svg>';
cont.innerHTML += svg;
}
// helper function to scale up polygon coordinates
function scaleup(poly, scale) {
var i, j;
if (!scale)
scale = 1;
for(i = 0; i < poly.length; i++) {
for(j = 0; j < poly[i].length; j++) {
poly[i][j].X *= scale;
poly[i][j].Y *= scale;
}
}
return poly;
}
// converts polygons to SVG path string
function polys2path (poly, scale) {
var path = "", i, j;
if (!scale)
scale = 1;
for(i = 0; i < poly.length; i++) {
for(j = 0; j < poly[i].length; j++) {
if (!j)
path += "M";
else
path += "L";
path += (poly[i][j].X/scale) + ", " + (poly[i][j].Y/scale);
}
path += "Z";
}
return path;
}
function reverse_copy(poly) {
// Make reverse copy of polygons = convert polyline to a 'flat' polygon ...
var k, klen = poly.length, len, j;
for (k = 0; k < klen; k++) {
len = poly[k].length;
poly[k].length = len * 2 - 2;
for (j = 1; j <= len - 2; j++) {
poly[k][len - 1 + j] = {
X: poly[k][len - 1 - j].X,
Y: poly[k][len - 1 - j].Y
}
}
}
}
</script>
</head>
<body onload="draw()">
<h2>Javascript Clipper Library/Offset polyline</h2>
This page shows an example of offsetting polyline and drawing it using SVG.
<div id="svgcontainer"></div>
</body>
</html>
E tutto questo è buono, ma ora devo sostituire le variabili poligono con punti da Google Maps le direzioni, in modo da fare questo cambiamento:
directionsService.route(request, function(response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
function draw() {
var polygons = response.routes[0].overview_path;
//REST OF CODE
}
}
}
ho a JS Bin example con questo codice per compensare il poligono attorno alla polilinea.
Ma c'è qualche problema, che non riesco a regonize e non riesco a ottenere un poligono attorno direzioni.
C'è un modo per risolvere questo problema?
perché - meno per questa domanda, che cosa è sbagliato? –
Non sono stato io a svalutare, ma posso immaginare che fosse perché la tua domanda era troppo ampia. COSÌ. non è qui per eseguire il debug dei programmi.Hai bisogno di mostrare quali passi hai preso per risolvere il problema te stesso. Ad esempio, il primo passo sarebbe quello di riordinare il codice e sbarazzarsi degli errori javascript che vengono visualizzati nella console. Quindi puoi farlo visualizzare il percorso (senza il poligono)? Quindi prova ad aggiungere il codice poligono. –
sì, provo a risolvere il mio problema con var polygon = response.routes [0] .overview_path; –