H:::SPARQL

H_15. 위경도로 반경내 위치 찾기

joyHong 2017. 12. 7. 14:09

위도와 경도를 통해 반경 몇 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 구문의 입력값으로 활용하면 된다.