現在、Canvas APIを使用して
Google Map上にポリゴン図形を書きたいのですが
方法が分からなくて困っています。
ぜひ、教えていただけるとありがたいです。
今後、ポリゴン図形以外も
Canvas APIを使用して制作していくので
Canvas APIを使用した解決策を頂けたらと思います。
宜しくお願いします。
該当のソースコード
$('#' + this.shapeButtons.pori).click(function() { //ポリゴンの中身 self.createLayer().done(function(newLayer) { self.layers.push(newLayer); //フラグ設定(下記のisMouseDownの表記の部分) var isMouseDown = false; //配列 var Points = new Array(); //クリック判定 var clickCount = 0; if (clickCount = 1) { /*----------------------------------------------------------------------*/ newLayer.canvas.addEventListener('mousedown', e => { //マウスダウン isMouseDown = false; self.map.setOptions({ draggable: false }); var rect = e.target.getBoundingClientRect(); x = e.clientX - rect.left; y = e.clientY - rect.top; console.log('mousedown x:' + x + ' y:' + y); }, { once: false }); /*----------------------------------------------------------------------*/ //マウスのカーソルを移動させているときの動作 newLayer.canvas.addEventListener('mousemove', e => { //マウスムーブ //フラグがtrueの時にmousemoveが動作する if (isMouseDown) { var rect = e.target.getBoundingClientRect() var ux = e.clientX - rect.left; var uy = e.clientY - rect.top; console.log('mouseup x:' + x + ' y:' + y + ' ux:' + (ux - x) + ' uy:' + (uy - y)); newLayer.context.clearRect(x, y, newLayer.canvas.width, newLayer.canvas.height) newLayer.context.beginPath(); newLayer.context.lineTo(ux, uy); newLayer.context.strokeStyle = "red"; newLayer.context.lineWidth = 5; newLayer.context.stroke(); } }, { once: false }); /*----------------------------------------------------------------------*/ //マウスを離した時の座標を取得 newLayer.canvas.addEventListener('mouseup', e => { //マウスアップ //フラグがfalseの時は動作しない isMouseDown = false; var rect = e.target.getBoundingClientRect(); var ux = e.clientX - rect.left; var uy = e.clientY - rect.top; console.log('mouseup x:' + x + ' y:' + y + ' ux:' + (ux - x) + ' uy:' + (uy - y)); newLayer.context.moveTo(x, y); newLayer.context.lineTo(ux, uy); newLayer.context.closePath(); newLayer.context.strokeStyle = "red"; newLayer.context.lineWidth = 5; newLayer.context.stroke(); newLayer.context.fillStyle = "rgba(50,0,0,0.8)"; newLayer.context.fill(); self.map.setOptions({ draggable: true }); /**falseにすると同じレイヤーに何度も描画ができて *once:trueだと一度しかレイヤーに描画出来なくなる */ }, { once: false }); /*----------------------------------------------------------------------*/ newLayer.canvas.addEventListener('mousedown', e => { //マウスダウン isMouseDown = false; self.map.setOptions({ draggable: false }); var rect = e.target.getBoundingClientRect(); x = e.clientX - rect.left; y = e.clientY - rect.top; console.log('mousedown x:' + x + ' y:' + y); Points.add(x, y); }, { once: false }); } newLayer.context.fillStyle = "rgba(50,0,0,0.8)"; newLayer.context.fill(); }); });
試したこと
現在
直線,短形、円などの描画は出来ています。
回答1件
あなたの回答
tips
プレビュー