H_15. 위경도로 반경내 위치 찾기
위도와 경도를 통해 반경 몇 km안의 장소를 찾을 수 있다.
prefix geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
select * where {
?s geo:lat ?slat.
?s geo:long ?slong.
bind(STR(concat("POINT(", ?slong, " ", ?slat, ")")) as ?point)
FILTER (bif:st_within(bif:st_geomFromText(?point), bif:st_point (128.676, 37.6427), 3))
}
필터 부분에 대한 설명을 덧붙이면
bif:st_within(bif:st_geomFromText(?point), bif:st_point (128.676, 37.6427), 3)
bif:st_within(A, B, C) 와 같은 형식으로 사용하는데
A는 찾는 대상,
B는 기준이 되는 위치
C는 반경 몇km인지를 기술한다.
이를 해석하자면 'B의 위치(위도 37.6427, 경도 128.676) 반경 3km안의 지점을 찾아라' 고 할 수 있겠다.
A에 해당하는 부분을 다시 살펴보면
bif:st_geomFromText(?point)
변수 ?point 의 내용을 geometry 형식으로 만드는 것이고
?point는 bind 구문을 통해
bind(STR(concat("POINT(", ?slong, " ", ?slat, ")")) as ?point)
찾을 대상을 POINT(경도 위도) 형태로 만들어 놓은 값이다.
B에 해당하는 부분은
bif:st_point (128.676, 37.6427) 이다.
A와 B 모두를 같은 형태의 값으로 만들어 bif:st_within 구문의 입력값으로 활용하면 된다.