| |
|
|
|
|
|
진행하고 있는 프로젝트에서 사용하고 있는 공간 DBMS로 PostGIS를 사용하고 있습니다. 공간 테이블을 직접 만들어어 활용해야할 필요가 있어 찾은 내용을 정리해 봅니다.
고유한 ID 값으로써 fid와 기타 필드로써 name 그리고 Geometry 값에 대한 the_geom이라는 이름의 필드를 가지는 테이블을 생성하는 SQL 문의 예는 다음과 같습니다. 1번 줄에 생성할 테이블 명으로써 tst_Table로 지정했습니다. 2~4번 줄이 앞서 언급한 필드들이구요. 6번 줄은 Geometry에 대한 필드인 the_geom의 차원이 2차원, 즉 X와 Y의 쌍이어야 한다는 제약 조건입니다. 그리고 8번 줄의 제약 조건은 Geometry가 MULTIPOLYGON 타입이며 NULL 일 수 있다는 것 입니다. 그리고 13번 줄은 Geometry의 Spatial Reference ID에 대한 제약 조건입니다.
이제 아래는 앞서 생성한 공간 테이블에 하나의 레코도를 추가하는 SQL 문입니다. 일반적인 INSERT SQL 문입니다. 단지 주목해야할 줄은 11번입니다. Geometry에 대한 WKT 형식으로 지정했으며 공간참조로 -1을 주었습니다. 이 값은 앞서 공간 테이블을 생성할때 제약 조건과 일치합니다.
|
김형준(Dip2K)
2012/01/25 11:25
2012/01/25 11:25
|
|
| Track this back : http://www.gisdeveloper.co.kr/trackback/801 |
|
|
|
|
|
|
|
핑거아이즈에서 마우스로 거리와 면적을 측정하는 방법에 대한 설명입니다. 펑거아이즈는 면적과 거리에 대해서도 스냅핑 기능을 적용할 수 있음으로 보다 정확하게 면적과 거리를 측정할 수 있습니다. 예를 들어 지적도를 대상으로 스냅핑을 적용할 경우 면적과 거리를 마우스를 이용해 측정할때 지적도의 도형의 정점이나 선분에 스냅핑되어 지적도를 정확히 참조하여 거리와 면적을 측정할 수 있습니다.핑거아이즈의 거리와 면적의 측정은 매쉬업 레이어를 대상으로 작동합니다. 그러므로 거리와 면적을 측정하기 위해서는 지도 컴포넌트에 XrMashupLayer 클래스를 통해 매쉬업 레이어를 추가해야 합니다. 아래의 코드는 "mashup"이라는 레이어 고유 식별자를 지정하여 매쉬업 레이어를 추가하는 코드입니다. 레이어 고유 식별자는 임이의 문자열로 지정 가능하며 각 레이어 마다 고유해야 합니다.
보시면, 매쉬업 레이어를 추가한 후에 편집 대상 레이어로써 추가한 매쉬업 레이어를 지정해 줘야 합니다. 면적 측정이나 거리 측정은 마우스를 통한 새로운 폴리곤과 폴리라인을 만들어 내는 작업이므로 간단한 편집 기능으로 분류되기 때문입니다.
이제 거리와 면적을 측정하는 코드에 대해 살펴보겠습니다. 먼저 면적을 측정하기 위한 버튼을 클릭하게 되면 발생하는 클릭 이벤트 처리 함수에 대해 다음처럼 코딩합니다.
먼저 3번 코드를 통해 맵의 상태를 편집 상태로 지정합니다. 편집 상태가 되면 마우스에 대한 조작은 모두 편집 행위로 간주됩니다. 다시 지도를 확대하고 축소하고 이동하려면 editMode를 false로 지정해 주면 됩니다. 그리고 4번 코드를 통해 고유한 id 값을 하나 만듭니다. fid 변수는 int 타입의 전역 변수로써 계속 1씩 증가해 중복되지 않은 값을 유지합니다. 물론 정말 중복되지 않도록 하려면 필요할 경우 다양한 방법이 적용되어야 할 것입니다. 5번 코드는 폴리곤을 그리라는 코드로써 앞서 만들어 놓은 중복되지 않는 정수값 인자 하나와 true 값 인자가 사용됩니다. 중요한 것이 바로 이 두번째 인자인 true입니다. true값이 지정되면 그래픽 요소를 그릴때 그래픽 요소에 관련된 측정값이 함께 표시됩니다. 여기서는 폴리곤이므로 폴리곤의 면적이 표시됩니다. 아래의 이미지는 면적 측정 버튼을 누른후 마우스 클릭을 통해 면적을 측정하는 화면입니다. 다음은 거리를 측정하는 코드입니다.
면적 측정과 다른 부분은 5번 코드 뿐입니다. 즉, addPolygon 대신에 거리 측정에 대한 폴리라인인 addPolyline 매서드로 대체되었습니다. 아래의 그림은 거리 측정 버튼을 클릭하고 마우스로 거리를 측정하는 화면입니다.
|
김형준(Dip2K)
2012/01/20 15:27
2012/01/20 15:27
|
|
| Track this back : http://www.gisdeveloper.co.kr/trackback/799 |
|
|
|
|
|
|
|
| 또 다시 지오메트리에 대한 WKT 형식을 파싱해야할 상황이 생겼습니다. 예전엔 한땀.. 한땀.. -_-; 문자값 하나 하나를 파싱해서 좌표값을 뽑아 냈더랬습니다. 그런데.. 또 이짓을 해야한다고 생각하니.. 손과 뇌에 마비가 와 죽어도 못하겠더군요..
해서.. 뭔가 그럴듯한.. 세련된 방법이 없나.. 궁리를 하다가.. 정규표현식(Regular Expressions)를 이용해 보자라는 생각이 들었습니다. 예전에 정규표현식에 대해 살펴봤던 적이 있었는데.. 이런게 있구나 싶을 정도로만 봐두었던지라.. 떠올랐나봅니다.
실무에서 필요한 기술이라 생각되니.. 정규표현식을 사용하는 방법을 제법 집중해서 살펴보게 되었습니다.. 결국 원하는 결과를 얻어 냈습니다... 해서 정규표현식을 이용해 WKT 형식의 지오메트리의 좌표를 뽑아 내는 코드를 잠시 살펴보겠습니다.
대상이 되는 WKT는 다음과 같다고 하겠습니다. 예이므로 올바른 폴리곤은 아닙니다. 단지 WKT 형식이라는 점에만 유념해 주시면 됩니다. 이 WKT을 보면 폴리곤이 3개의 파트로 구성됩니다. 정규표현식을 이용해 3개의 파트에 대해 각 파트를 구성하는 좌표를 쭉... 뽑아내 보는 코드는 아래와 같습니다. 실제 결과는 다음과 같습니다.
정규표현식을 이제 막 익힌 제가 머리를 쥐어짜가며 구성한 코드입니다. 4개나 되는 정규표현식을 사용했습니다.. 정규표현식에 숙련된 자라면 휠씬 빠르고 적은 수의 표현식으로 동일한 결과를 얻어 낼 수 있을거라.. 생각해 봅니다.
아! 위의 코드는 예는 ActionScript입니다. 물론.. 정규표현식은 C#, JavaScript, C, PHP 등등 매우 많은 언어에서 사용할 수 있는 기능입니다. 각 언어에 따라 정규표현식에 대한 API가 다르지만 정규표현식 자체는 거의 동일합니다.
|
김형준(Dip2K)
2012/01/16 19:24
2012/01/16 19:24
|
|
| Track this back : http://www.gisdeveloper.co.kr/trackback/797 |
|
|
|
|
|
|
|
플래시 11 설치 필요.. 플래시 11이 설치된 안드로이드에서는 보일까... 또한 얼마나 많은 사용자들의 PC에 플래시 11이 설치되어져 있을까..
플래시 11이 설치된.. IE7, 8, 9 그리고 크롬, 사파리 웹 브라우져에서 정상적으로 실행됨.. 그런데 안드로이드에서는 않됨.. 인터넷으로 검색해 보면 된다고 나와 있는데... 뭐가 잘못된 걸까...... 애플의 iOS는 AIR 형태로 개발해 올리면 실행이 될까....?
|
김형준(Dip2K)
2012/01/11 22:40
2012/01/11 22:40
|
|
| Track this back : http://www.gisdeveloper.co.kr/trackback/796 |
|
|
|
|
|
|
|
"무엇인가를 완벽히 이해하려면, 천천히 씹어 삼키기 위한 자세와 열정적인 자기 헌신이 필요하다. 하지만 대부분의 사람은 그런 일을 하지 않는다", 1996년에 스티브잡스가 한 말이라고 합니다. 하나의 목표를 정했고.. 그 목표를 이루기 위한 태도와 마음가짐을 표현한 말이라 생각합니다. 오늘 이후.. 목표를 이루기 위한 과정 중... 힘들때... 이 글이 내 자신에게 힘이 되어 주길 바랍니다..
"이미 짐작했잔아.. 뭘 힘들다 투정대는거야? 계속 가!"
|
김형준(Dip2K)
2012/01/11 20:29
2012/01/11 20:29
|
|
| Track this back : http://www.gisdeveloper.co.kr/trackback/795 |
|
|
|
|
|
|
|
출근해서 점심 시간 빼고 정말 단 1초도 사무실에서 꼼짝 달싹 않고 오직 일만 하다가.. 저녁 식사 시간이 다가와서 와이프가 싸준 삶은 달걀 2개를 꺼내 먹었습니다.. 오후에 출출할때 간식으로 먹으라고 한 건데.. 그냥 저녁 밥 대신 먹을 요량으로 말입니다. 근데.. 소금을 싼 은박지에 쪽지 하나가 있네요..
아... 힘이 납니다.. ㅜ_ㅜ 그래 열심히 할께~ 열심히 해서 돈 많이 벌면 좋겠습니다.. 와이프의 응원에 오늘 저녁도.. 열라 기분 이빠이 좋아라 달립니다..!
|
김형준(Dip2K)
2012/01/09 17:43
2012/01/09 17:43
|
|
| Track this back : http://www.gisdeveloper.co.kr/trackback/794 |
|
|
|
|
|
|
|
안드로이드 기반의 GIS 엔진인 블랙포인트은 사용자가 볼 수 있는 지도의 축척을 일정한 범위로 제한할 수 있습니다. 아래의 코드는 축척을 1:700000 ㅡ 1:500 사이에서만 지도를 볼 수 있도록 하는 예제입니다.
블랙포인트는 축척이 변경될때마다 축척 변경에 대한 이벤트가 발생합니다. 이 이벤트를 이용하는 방법인데요. 이 축척 변경 이벤트 안에서 축척값을 조사해 범위를 벗어나면 축척값을 다시 설정해 주면 원하는 결과를 얻을 수 있습니다.
|
김형준(Dip2K)
2012/01/09 15:05
2012/01/09 15:05
|
|
| Track this back : http://www.gisdeveloper.co.kr/trackback/793 |
|
|
|
|
|
|
|
오직 공간 도형에 대한 FID 값만을 알고 있는 상태에서 해당 도형의 MBR 영역을 얻어는 방법입니다. 물론 공간 데이터는 저...... 멀리 떨어진 서버에 존재하고 있습니다. 사용하는 클래스는 XrQueryMBRByFIDService이며 사용 예에 대한 코드는 다음과 같습니다.
1번과 2번 코드를 통해 FID 값은 77707이며 검색 대상이 되는 레이어를 레이어 명으로 얻어옵니다. 그리고 XrQueryMBRByFIDService의 run 함수를 통해 FID와 대상 레이어를 인자로 해서 호출합니다.
성공적으로 MBR을 얻어오면 onRequestMBRComplete 함수가 호출되며 실패하면 onRequestMBRError가 호출됩니다. 이 함수들의 코드는 다음과 같은 형태가 될 수 있습니다.
MBR 얻기가 성공했을때 호출되는 콜백함수에는 MBR 값이 XrExtent 타입으로 넘어옵니다. 이 타입을 통해 MBR에 접근해 지도를 이동시키는 등의 작업을 할 수 있습니다.
아래의 이미지는 위의 코드를 기반으로 지적 검색 기능을 실제 프로젝트에 적용해 본 화면입니다. 읍면 그리고 리 등과 같은 정보를 입력하고 검색을 누르면 해당 지번이 검색되고 검색된 지번 중 하나를 선택하고 이동 버튼을 누르면 선택된 지번의 FID 값을 이용해 해당 위치로 이동합니다.
|
김형준(Dip2K)
2012/01/05 17:28
2012/01/05 17:28
|
|
| Track this back : http://www.gisdeveloper.co.kr/trackback/792 |
|
|
|
|
|
|
|
Flex 기반의 GIS 엔진인 핑거아이즈는 데이터베이스 테이블의 데이터를 쉽게 쿼리할 수 있는 매우 손쉬운 API를 내장하고 있습니다. XrQueryTableService라는 클래스로 이름에서도 알 수 있듯이 테이블에 대해 쿼리를 날려주는 서비스를 제공하는 녀석입니다. SQL 구문 중 SELECT 구문을 통해 쉽게 데이터를 질의할 수 있습니다. 아래는 이 클래스를 사용하는 한가지 예입니다.
DBMS는 127.0.0.1:8080 주소에 존재하는 서버에 있습니다. 그리고 DBMS는 postgis이구요. arcsde나 jdbc로도 지정이 가능합니다. 쿼리가 성공했을 시 searchQueryRequestComplete라는 함수가 콜백되고 실패했을 시에는 searchQueryRequestError라는 함수가 콜백됩니다. 실제 SQL문의 지정은 XrQueryTableService의 run 매서드를 통해 실어 보낼 수 있습니다.
쿼리시 성공했을 때와 실패했을 때의 콜백 함수의 예는 다음과 같습니다.
위에서 ta는 Flex의 TextArea 컴포넌트입니다. 버튼을 클릭했을 시 위의 코드들을 통해 쿼리를 날리고 결과를 받아 화면에 표시하는 화면은 아래와 같습니다.
보시는 것처럼 TextArea에 쿼리 결과가 XML 형태로 넘어 오는 것을 알 수 있습니다. 핑거아이즈는 개발자가 쉽게 DBMS에 접근하여 개발할 수 있도록 XrQueryTableService라는 클래스를 제공합니다. 이 외에도 ID를 통해 공간 도형의 MBR을 가져오는 서비스 등도 클라이언트 맵 엔진 단에서 제공하고 있습니다.
|
김형준(Dip2K)
2012/01/04 15:51
2012/01/04 15:51
|
|
| Track this back : http://www.gisdeveloper.co.kr/trackback/791 |
|
|
|
|
«
2012/01
»
| 일 |
월 |
화 |
수 |
목 |
금 |
토 |
| 1 |
2 |
3 |
4 |
5 |
6 |
7 |
| 8 |
9 |
10 |
11 |
12 |
13 |
14 |
| 15 |
16 |
17 |
18 |
19 |
20 |
21 |
| 22 |
23 |
24 |
25 |
26 |
27 |
28 |
| 29 |
30 |
31 |
|
|
|
|
|
Total : 937823
Today : 309
Yesterday : 583 |
|
|
|