알려드린 알고리즘은 직교좌표계에서의 x, y값을 받아서 사용하는 것이라서
위경도는 구면좌표계에 대응되므로 정확하지 않을 수 있지만
우리나라가 그리 큰 면적이 아니라서 오차가 크지 않을 것이므로
그냥 위경도를 넣어도 대부분의 경우에서 잘 나올겁니다.
(수정)
위에 말은 뭐 대충 그렇긴한데, API 설계 미스가 약간 있어서 코드를 수정합니다.
직교좌표계의 좌표로 계산하는 코드입니다.
// https://github.com/substack/point-in-polygon/blob/master/index.js
function inside(point, vs) {
var x = point[0], y = point[1];
var inside = false;
for (var i = 0, j = vs.length - 1; i < vs.length; j = i++) {
var xi = vs[i][0], yi = vs[i][1];
var xj = vs[j][0], yj = vs[j][1];
var intersect = ((yi > y) != (yj > y))
&& (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
if (intersect) inside = !inside;
}
return inside;
};
var markers = [ /* YOUR MARKERS */ ];
// drawn polygon path
var path = polygon.getPath(); // it returns Array of Coords
var pathArr = path.map(function(coords) {
return [coords.getX(), coords.getY()]
});
var markersInPolygon = markers.filter(function(marker) {
// marker.getPosition() returns LatLng.
var mPos = marker.getPosition().toCoords();
return inside([mPos.getX(), mPos.getY()], pathArr);
});
console.log(markersInPolygon);
알고리즘 원본 코드를 살려서 활용하는 방식을 보여드리기 위해 배열로 변환하는 과정을 거쳤지만
알고리즘 내부 코드를 API에 맞게 고치면 성능이 조금 더 빨라질 수도 있습니다.
실제 돌려본 코드가 아니라서 동작하지 않을 수 있으니 양해 부탁드리고요.
지난 circle안 마커 구하기 코드에 대해서 답변드리면서 말씀드렸지만
위 코드 사용은 자유입니다. 하지만 사용함으로써 발생하는 문제에 대해서는 책임지지 않습니다.