Chcę narysować wielokąt wokół polilinii. Polilinia w moim przypadku to kierunek w Mapach Google i muszę pokazać wokół niego wielokąt w kanwie Map Google.Jak narysować wielokąt wokół polilinii w JavaScript?
pierwsze:
Dla skompensowania używam JavaScript Clipper Library. Mam następującą polilinię (trasę): Tworzę offsetowy wielokąt poniżej używając Clippera:
Mam działający JS Bin example.
Kod jest:
<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>
A wszystko to jest dobre, ale teraz muszę wymienić zmienne wielokąta z punktów z Google Maps kierunkach, więc robię tę zmianę:
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
}
}
}
mam a JS Bin example z tym kodem dla przesunięcia wieloboku wokół polilinii.
Ale jest pewien problem, którego nie mogę zregenerować i nie mogę uzyskać wielokąta wokół wskazówek.
Czy istnieje sposób na rozwiązanie tego problemu?
dlaczego - minus za to pytanie, co jest nie tak? –
To nie ja zarzuciłem, ale mogę sobie wyobrazić, że to dlatego, że twoje pytanie było zbyt szerokie. WIĘC. nie jest tutaj, aby debugować twoje programy.Musisz pokazać, jakie kroki podjąłeś sam, aby rozwiązać problem. Na przykład pierwszym krokiem byłoby uporządkowanie kodu i pozbycie się błędów javascript wyświetlanych w konsoli. Czy możesz go wyświetlić wyświetlając trasę (bez wielokąta)? Następnie spróbuj dodać kod wielokąta. –
tak, próbuję rozwiązać mój problem z var polygon = response.routes [0] .overview_path; –