FingerEyes-Xr에서 WKT 문자열로부터 GraphicRow 생성하기

서버 측으로부터 뭔가를 요청해서 얻은 결과가 Geometry 일때, 그 Geometry의 형식은 WKT가 가장 일반적입니다. WKT는 Well-Known Text의 약자입니다.

예를 들어, 두 개의 좌표 사이의 최단경로에 대한 결과로써, Polyline 형태로 경로에 대한 연속된 좌표 리스트값을 WKT로 요청하는 서비스 호출이 아래와 같다고 합시다.

var url = "http://localhost/Gp?command=wlkroute;start=(132648 283024);end=(155054 243212);db=gdb";

위의 요청에 대한 결과는 두 지점간의 최단경로에 대한 연속된 좌표값을 가지는 WKT 형식입니다. 이런 WKT 형식의 데이터를 지도 상에 시각화 하기 위해 FingerEyes-Xr에서 그래픽 요소로 추가하고자 한다면.. 아래와 같은 코드를 적용할 수 있습니다.

var url = "http://localhost/Gp?command=wlkroute;start=(132648 283024);end=(155054 243212);db=gdb";
$.ajax({
    url: url,
    dataType: "text",
    type: "GET",
    statusCode: {
        200: function (response) {
            response = JSON.parse(response);
            var wkt = response.wkt;

            var map = ...;
            var layers = map.layers();
            var lyrName = "gl_route";
            var grp = new Xr.layers.GraphicLayer(lyrName);

            layers.remove(lyrName);
            layers.add(grp);

            var rs = grp.rowSet();
            var psd = new Xr.data.PolylineShapeData([[]]);

            psd.fromWKT(wkt);

            var pgr = new Xr.data.PolylineGraphicRow(0, psd);
            pgr.penSymbol().width(10).color("red").opacity(0.5);

            rs.add(pgr);

            var mbr = psd.MBR();
            map.coordMapper().zoomByMBR(mbr);
            map.update();
        }
    }
});

9번 코드가 서버단에서 받아온 WKT 문자열이고, 이 문자열을 22번 코드에서처럼 그래픽 요소의 좌표값으로 해석하기 위해 fromWKT 함수를 사용합니다. 여튼.. 이러한 서버단에서 보내온 WKT 형식의 지오메트리에 대한 시각화의 예제 화면은 아래와 같은데요.

위의 화면은 두 지점에 대한 최단 경로입니다.

Mr.Tiler-Xr을 이용한 배경맵 디자인 기능

Mr.Tiler-Xr을 통한 배경맵 디자인 기능에 대한 소개입니다. 공개된 DB를 활용했고, 활용한 레이어는 행정구역도, 실폭도로, 도로중심선, 건물입니다. 보다 더 다양한 레이어를 사용하면 더욱 세련된 배경지도를 디자인할 수 있습니다.

위처럼 디자인된 배경지도는 다시 Mr.Tiler-Xr에서 타일맵(Tile Map)으로 가공되어 웹에서 서비스 될 수 있습니다. 전국범위에 대해서도 매우 빠르게 가공될 수 있고, 변경된 영역에 대해서만 가공되어 다시 전체에 반영될 수 있습니다.

특정 지점으로부터 가장 가까운 지오메트리의 가장 가까운 교차점

아래의 이미지를 보면, Polyline 형태(GIS에서는 linestring이라는 용어를 사용함)의 레이어인 Link1가 있고, 빨간 포인트로 표시된 지점이 있다. 여기서.. Link1의 지오메트리 중 빨간 포인트에서 가장 가까운 녀석을 구하고, 이렇게 구한 녀석에 대해서 빨간 포인트와 가장 가까운 교차점을 구하고자 한다.

이러한 문제에 대해 해결할 수 있는 다양한 쿼리문 중 하나는 다음과 같다.

SELECT 
    fid,
    st_astext(
        st_closestpoint(
            the_geom, 
            st_geomfromtext('POINT(149761 265625)')
        )
    ),
    st_distance(
        st_closestpoint(
            the_geom, 
            st_geomfromtext('POINT(149761 265625)')
        ),
        st_geomfromtext('POINT(149761 265625)')
    ) as dist
FROM 
    network_link
ORDER BY 
    dist
LIMIT 1;

위 쿼리에 대한 결과는 아래와 같다.

ID가 557인 녀석이며, 예상했던 것처럼 교차점과 거리에 대한 결과를 볼 수 있다.

GeoService-Xr의 좌표 변환 서비스

GIS 서버인 GeoService-Xr은 하나 이상의 좌표에 대해 다른 좌표체계를 갖는 좌표로 변환할 수 있는 서비스를 제공합니다. 아래는 EPSG:4326 좌표계를 EPSG:5186 좌표계로 변환하는 서비스 호출에 대한 js 코드입니다.

var wkt = "LINESTRING(127 38, 127.1 38.1, 127.2 38.3)";

$.ajax({
    url: "http://www.gisdeveloper.co.kr:8080/Gp?command=proj;fromEPSG=4326;toEPSG=5186",
    type: "POST",
    data: wkt,
    dataType: "text",

    success: function (response) {
        response = response.substr(0, response.length - 1); // response 문자열 끝에 \0 문자를 제거

        document.writeln("

입력 : " + wkt + "

"); document.writeln("

결과 : " + response + "

"); }, error: function (xhr, status) { alert("ERROR"); } });

위의 코드는 WGS84 경위도 좌표체계(EPSG:4326)인 3개의 좌표, 즉 (127 38), (127.1 38.1), (127.2 38.3)을 GRS80 타원체인 대한민국 중부 TM 좌표체계(EPSG:5186)로 변환을 서버단에 요청하고 있습니다. 서버가 정상적으로 작동한다면 아래와 같은 결과를 볼 수 있습니다.

NexGen에서 지형에 대한 3차원 시각화 기능

우리는 GIS의 많은 기능을 2차원에서 수행하다가, 실제 그 형상을 보다 사실적으로 시각화 파악하고 싶을 때가 있습니다. NexGen은 이러한 사용자의 요구 사항을 완벽하게 충족시키기 위해 지형에 대한 3차원 시각화 기능을 제공합니다.

아래의 동영상은 이에 대한 기능의 시연입니다.

공간 서버에 지형에 대한 표고 데이터에 대한 DEM을 저장해 이처럼 웹에서 지형을 3차원 시각화할 수 있는 NexGen은 (주)지오서비스의 공간서버인 GeoService-Xr와 공개소프트웨어인 FingerEyes-Xr을 이용해 개발되었습니다. NexGen의 기능에 대한 더 많은 내용은 (주)지오서비스의 홈페이지를 참고하시기 바랍니다.