var getPoints = (function() {
var points = [{
x: 90,
y: 70
}, {
x: 100,
y: 80
}, {
x: 20,
y: 40
}]
return function() {
return points;
}
})();
function dist(point1, point2) {
var pow = Math.pow;
return Math.sqrt(pow((point2.x - point1.x), 2) + pow((point2.y - point1.y), 2));
}
function drawCircle(centerX, centerY, radius, fill) {
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
context.beginPath();
context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);
if (fill) {
context.fillStyle = 'green';
context.fill();
}
context.lineWidth = 2;
context.strokeStyle = '#003300';
context.stroke();
}
function spatialSearch(centerX, centerY, radius) {
var points = getPoints(),
res = [],
len,
r = 5,
fill,
i;
drawCircle(centerX, centerY, radius);
for (i = 0, len = points.length; i < len; i += 1) {
ele = points[i];
fill = undefined;
if (dist({
x: centerX,
y: centerY
}, ele) <= radius) {
res.push(ele);
fill = 'green';
}
drawCircle(ele.x, ele.y, r, fill);
}
return res;
}
spatialSearch(100, 75, 50);
<canvas id="myCanvas" width="300" height="150" style="border:1px solid #d3d3d3;">
Your browser does not support the HTML5 canvas tag.</canvas>
あなたは手前で検索することを知っていますか?空間クエリをサポートするデータベースを使用できますか? –
各クエリーの半径は常に同じサイズになりますか?それはどれくらい違うのですか?これは、あなたの目的にとって最も効率的な空間データ構造の選択に影響します。 – samgak
これは現在のデータの生のテーブルです。私はそれを保存するための提案を受けていますが、ローカルに保存し、Node.jsアプリケーションからアクセス可能である必要があります。探索されるポイントは様々ですが、毎回知ることは明らかです。半径も可変です。 – FatalKeystroke