| |
|
|
|
|
|
| ArcObjects에서 제공하는 Map 컨트롤은 기본적으로 GraphicsContainer 자식 객체를 가지고 있으며 이 컨테이너에 사용자가 원하는 그래픽 요소를 추가할 수 있는 기능을 제공합니다. 추가할 수 있는 그래픽 요소는 생각할 수 있는 2차원 요소 대부분으로 포인트, 폴리라인, 폴리곤, 사각형, 타원 등입니다. 이 글은 이러한 그래픽 요소를 추가하는 방법를 폴리곤 그래픽 요소의 추가를 예로 들어 정리해 하겠습니다.
그래픽 요소의 구성은 크게 지오메트리(Geometry)와 심벌(Symbol)이며... 지오메트리는 정점으로 구성한 그래픽 요소의 뼈대로 생각할 수 있고 심벌은 그래픽 요소의 채움에 대한 색이나 투명도 그리고 외곽선의 굵기, 색상 등에 대한 정보입니다.
앞서 언급한 폴리곤 그래픽 요소를 추가하기 위하여 먼저 지오메트리를 구성하는 코드를 작성해 보면 다음과 같습니다.
사각형을 구성하는 4개의 좌표를 지정하기 위해 Point 타입의 변수 pPt1, pPt2, pPt3, pPt4의 X 그리고 Y에 좌표값을 지정합니다. 여기서는 사각형의 구성 좌표는 (100, 100) (900, 100) (900, 900) (100, 900)입니다. 그리고 이렇게 지정한 좌표로 구성된 사각형 폴리곤을 구성하기 위해 Polygon 타입의 pPg 변수를 만들고 앞서 만든 4개의 좌표 변수를 추가합니다. 여기까지가 그래픽 요소의 지오메트리를 정의하는 방법이고... 다음으로 심벌을 정의하는 방법에 대해 정리해 보겠습니다.
폴리곤의 심벌을 간단히 생각해보면 채움과 외곽선으로 구분할 수 있습니다. 아래의 코드가 채움 심벌과 외곽선 심벌을 지정하는 코드입니다.
채움에 대한 색상과 외곽선에 대한 색상을 지정하기 위하여 IRgbColor 타입의 변수 pFillRGB와 pLineRGB를 정의하고 이 변수에 대한 색상을 RGB 요소 값으로 지정합니다. 그리고 이렇게 만든 색상을 실제 심벌에 지정하기 위하여 외곽선 심벌 타입인 ISimpleLineSymbol로 pSLS 변수를 생성하고 이 변수의 Color 속성에 앞서 지정한 색상을 지정합니다. 마찬가지로 채움에 대한 ISimpleFillSymbol 변수인 pSFS를 생성하고 색상을 지정합니다. 여기서는 단순한 채움과 외곽선 스타일이므로 ISimpleFillSymbol과 ISimpleLineSymbol을 사용했지만 다양한 이미지 패턴 채움 등과 같은 복잡한 심벌은 또 다른 심벌 타입을 사용하게 됩니다.
이제 이렇게 생성한 심벌과 지오메트리를 폴리곤 요소로써 그래픽 컨테이너에 추가하는 방법은 아래와 같습니다.
1번과 2번 코드가 폴리곤 요소인 PolygonElement 타입의 pPE를 생성하는 코드이며 4번 코드와 5,6번 코드가 앞서 정의한 지오메트리와 심벌을 pPE 객체에 지정하는 코드입니다. 그리고 이렇게 만든 폴리곤 요소를 그래픽 컨터에너에 추가하는 코드가 6번이며 화면상에 그 결과를 반영하는 코드가 마지막 7번 코드입니다. 참고로 6번 코드의 AddElement의 2번째 인자는 z-order 값으로써 0이 가장 최상단에 그려지게 됩니다. 아래는 실행 결과입니다.
 또한 앞의 코드를 통해 살펴본 폴리곤 요소와 지오메트리 그리고 심벌에 대한 클래스 관계도는 아래와 같습니다.

이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*
|
김형준(Dip2K)
2009/09/28 18:57
2009/09/28 18:57
|
|
| Track this back : http://www.gisdeveloper.co.kr/trackback/513 |
|
|
|
|
|
|
|
구글맵이나 네이버지도, 다음지도 등등 모든 포털 지도사이트에서 제공하는 지도 서비스는 지도 이미지를 256x256 픽셀 크기로 잘려진 타일이미지 형태로 서비스되고 있습니다. 자사만의 지도 타일이미지 렌더링 프로그램을 직접 개발한 곳도 있을테고.... 구글처럼 오픈소스 라이브러리를 이용해 구축한 곳도 있을테고....
현재 RIA 기반의 지도 솔루션 개발에 필요한 지도 타일 이미지 렌더러를 개발하고 있습니다. 오픈소스를 활용하여 개발할까... 생각도 해보았지만... 다양한 사용자가 원하는 자신만의 지도 스타일의 충족이라는 틈새 시장을 놓고 볼때... 오픈소스의 획일화된 지도 이미지 스타일은 제 기획 의도와 맞지 않다고 판단하여 직접 개발하기로 결정하게 되었습니다.
위의 결과 이미지는 현재 개발중인 지도 타일이미지 렌더러에서 텍스트 표현을 위해 고민해본 텍스트 효과입니다. 실제 종이 지도를 살펴보고 글자에 적용된 효과를 살펴보면서 위의 3가지 효과정도면 될듯하여 하나 하나 구현해 보았습니다.
추후 타일 이미지 렌더러... 개발이 완료되면 위의 텍스트 효과가 적용된 지도를 통해 좀더 분명한 결과를 알릴 수 있겠지만.. 지금 단계에서 현재 제 스스로가 무엇을 하고 있는지... 어느 방향으로 가고 있는지에 대해 한 조각이라도 구체화하기 위한 과정으로써의 글을 올려봅니다.
이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*
|
김형준(Dip2K)
2009/09/28 12:51
2009/09/28 12:51
|
|
| Track this back : http://www.gisdeveloper.co.kr/trackback/512 |
|
|
|
|
|
|
|
개발과 작업을 노트북에서 하던 중에.. 널직한 해상도와 쓸만한 퍼포먼스를 가진 컴퓨터가 필요하여 요 몇일 동안 알아보던 중.. 이왕 제대로 된 녀석을 구비할 것이면 역시 데스크탑이 어떨까 싶어 알아 본 컴퓨터입니다.
원래는 직접 부품을 하나 하나 살펴보고 조사해서 직접 조립할 기세였으나.... 그냥 완제품으로 구입하기 맘 먹고 결정한 녀석입니다. 짧게는 3년... 길게는 6년정도 사용할 PC이며 문서 작업과 코딩... 그리고 지도 이미지 렌더러 및 개발용 서버 등 매우 다양하게 활용될 녀석인지라... 그 목적에 부족함이 없도록 메모리나 하드 디스크 용량 그리고 CPU 및 그래픽 카드가 어느 정도 상급으로 구성된 녀석입니다.
하지만... 이왕이면 대학교 시절처럼 직접 조립해서 사용했으면 더 좋은 사양으로 더 저렴하게 조립할 수 있었을텐데..... 하는 아쉬움이 남습니다..
사양은 위와 같습니다. 제조사는 DELL이구요.. 대략 4년 정도 DELL 노트북 2종과 데스크탑 PC를 사용하면서 AS는 물론 사용하는데도 만족스러웠던 경험에서 제조사의 선택에 별다른 미련이 남지는 않습니다. 아래는 PC의 외관입니다.
그리고 모니터는 DELL이 아닌 LG 제품을 구입했습니다.. 실제 가장 많이 사용하는 작업이 코딩인지라 가독성이 높으면서 그런대로 해상도(1920 x 1080)로 선택했고.. 가격은 저렴한 녀석으로 선택했습니다. 이 녀석은 실제 매장에 들려 직접 눈으로 확인한 다음에 구입을 결정했습니다만.... 다른 기종들을 살펴보지 않은지라... 조금 미련이 남긴합니다..
의도하지는 않았지만 다행히... 본체와 모니터가 마치 한 패키지처럼 잘 어울리는듯합니다..
이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*
|
김형준(Dip2K)
2009/09/27 23:13
2009/09/27 23:13
|
|
| Track this back : http://www.gisdeveloper.co.kr/trackback/511 |
|
|
|
|
|
|
|
| GIS의 강력한 기능 중에 하나는 속성 데이터에 기반한 공간적인 처리 및 가시화인데, 이 글은 ArcObjects에서 속성값 조건에 대해 쿼리(Query)하는 방법에 대해 설명하겠습니다. 일단.... 속성값에 대한 쿼리가 목적이므로 먼저 속성값에 접근할 수 있는 ITable 인터페이스에 접근할 필요가 있습니다. 다음은 d:\__data__ 폴더 안의 seoul.dbf 파일로부터 ITable 인터페이스의 구체 클래스 인스턴스를 얻는 코드입니다.
ITable의 구체 클래스의 인스턴스인 pTable은 속성값으로 검색할 수 있는 매서드인 Search 함수를 가지고 있습니다. 이 Search 함수는 두개의 인수를 가지며 첫번째 인수의 타입은 IQueryFilter로써 SQL 문의 WHERE 절의 조건문을 지정하기 위해 사용됩니다. 그리고 두번째 인수는 검색 결과에 대한 Row에 대한 재활용 여부에 대한 bool 형입니다. 이에 대해서는 이 글의 마지막에 간단히 다시 설명하겠습니다.
속성값으로 쿼리하기 위하여 조건문을 만들기 위해서... 먼저 앞의 코드를 통해 오픈한 seoul.dbf 파일의 필드 구조를 알 필요가 있습니다. 힌트를 준다면 seoul.dbf의 속성 중의 하나는 SGG_NM으로써 서울시를 구성하는 행정구의 이름값이 저장되어 있습니다. 여기서는 행정구 이름에 '동'자가 들어가는 모든 Row를 검색하려고 합니다. 이런 조건을 위한 ITable의 Search의 첫번째 인자인 IQueryFilter의 CoClass(구체 클래스)의 정의는 다음과 같습니다.
IQueryFilter의 WhereClause 프로퍼티가 바로 '그것'인데.. 일반적인 SQL의 SELECT 문의 WHERE 절의 바로 정확히 '그것'에 해당합니다. SQL문의 SELECT문을 알고 있는 개발자라면 아~!라는 탄식이 나올정도로 ArcObjects는 속성값으로 데이터를 쿼리하는 탁월한 방법을 사용하고 있습니다. 이렇게 만든 IQueryFilter를 이용하여 쿼리하는 코드는 다음과 같습니다.
ITable의 Search 함수를 사용하며 검색 결과 Row는 IFeatureCursor 타입으로 반환됩니다. 검색 조건과 일치하는 Row를 얻기 위해 IFeatureCursor 타입의 인스턴스 변수인 pFC를 사용하는데.. 아래의 코드가 바로 그것이며, listBox1 이름의 ListBox 컨트롤에 그 결과를 채웁니다.
5번째 코드에서 가장 먼저 IFeatureClass의 NextFeature 매서드를 호출하여 첫번째 검색 결과의 Row에 해당되는 IFeature 클래스 타입의 인스턴스를 반환받고 첫번째 Row에 대한 값을 얻기 위하여 IFeature의 get_Value 매서드를 사용하여 값을 얻습니다. 그 다음 결과 Row를 얻기 위하여 다시 NextFeature를 호출합니다. NextFeature의 반환값이 null이면 더 이상 조건에 맞는 Row가 없다는 의미입니다. 실행 결과는 아래와 같습니다. 강동구, 성동구, 동작구, 동대문구와 같이 '동'자가 들어간 데이터만이 검색된 것을 알 수 있습니다.
 끝으로 앞서 언급한... 이 글의 핵심 매서드인 ITable의 Search 매서드의 두번째 인자의 의미에 대해서 설명하면... 만약 true라면 IFeatureClass의 NextFeature의 결과에 대한 인스턴스를 재활용한다는 의미이며 false이면 재활용하지 않고 NextFeature를 호출할때 마다 새로운 인스턴스를 생성한다는 의미입니다. 이를 목적에 대해 생각해보면 true이면 Feature를 읽기 전용으로만 사용해야 하며 false일 경우 IFeature를 통해 속성값을 변경할 수 있습니다.
이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*
|
김형준(Dip2K)
2009/09/24 22:54
2009/09/24 22:54
|
|
| Track this back : http://www.gisdeveloper.co.kr/trackback/510 |
|
|
|
|
|
|
|
| ArcGIS에서 Feature는 좌표에 대한 도형 데이터와 속성으로 묶어진 단위입니다. ESRI에서 정의한 Shape 파일의 경우 좌표에 대한 도형 데이터는 .SHP 파일에 저장되며 속성은 .DBF 파일에 저장됩니다. 속성은 하나의 DB 테이블 개념과 정확히 일치합니다. DB 테이블의 필드 정보와 각 필드에 대한 값들의 집합의 구성 요소인 로우(Row) 또는 레코드(Record)로 구성됩니다.
필드 정보라 함은 필드의 이름과 필드의 타입 그리고 필드 타입에 대한 데이터 저장 가능 길이 등으로 구성됩니다. 이 포스트는 Shape 파일에 대해서 .DBF에 저장된 필드 정보를 얻어내는 ArcObjects의 API에 대해서 설명합니다.
가장 먼저 해야할 작업은 .DBF 파일을 여는 것에서 시작합니다. 다음 코드는 .DBF 파일을 여는 방법입니다.
.SHP 파일을 여는 것과 매우 동일하다는 것을 알 수 있습니다. 다른 부분은 8, 9번 라인에서 ITable 타입으로 하여 테이블을 여는 것입니다. 위의 예는 d:/__data__ 폴더 안에 seoul.dbf 파일을 열어 그 테이블을 ITable 타입인 pTable에 저장해 놓는 경우입니다.
이렇게 얻은 pTable을 통해 필드 정보를 얻기 위한 코드는 아래와 같습니다.
테이블의 필드 정보는 IFields 타입에 저장되며 pTable의 Fields 속성을 통해 접근이 가능합니다. 4번째 줄은 필드의 전체 개수를 얻는 코드입니다. 이제 이렇게 얻은 pFields를 통해 각 필드의 이름, 별칭(Alias), 필드길이, 정밀도, 타입을 얻어 ListBox 컨트롤에 채워 보는 코드는 아래와 같습니다.
참고로 ListBox 컨트롤의 이름은 listBox1입니다. 앞서 구한 전체 필드의 개수를 통해 반복문에서 필드 정보를 IField 타입으로 가져와 필드의 정보를 구할 수 있습니다. 이름은 IField 타입의 Name 속성으로 알 수 있고, 별칭명은 AliasName, 길이는 Length, 정밀도는 Precision 그리고 필드의 타입은 Type으로 알 수 있습니다. 참고로 아래는 실행 결과 화면입니다.

이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*
|
김형준(Dip2K)
2009/09/22 11:17
2009/09/22 11:17
|
|
| Track this back : http://www.gisdeveloper.co.kr/trackback/509 |
|
|
|
|
|
|
|
| ArcObjects는 GIS 어플리케이션 개발에 적용할 수 있는 매우 방대하며 매우 강력한 라이브러리입니다. 기본적으로 ArcGIS를 설치하면 개발자가 쉽게 사용할 수 있도록 되어 있습니다. 필자는 2002년 초에 처음 ArcObjects를 접했는데... 그 방대함과 강력함에 매료되었습니다. 제가 아는 GIS 개발 범위에서 필요한 기능은 모두 ArcObjects에서 구할 수 있었다고 해도 과언이 아닐 정도로 말입니다.
간단한 수치지도 도시, 네트워크 및 위상 분석, 그리드 분석, 3D에 대한 틴, 모델 등의 표현과 관련된 공간 분석 그리고 강력한 편집 기능 등... 이루 다 말할 수 없을 정도로 방대한 GIS 개발 도구를 제공합니다. 처음 ArcObjects를 접하고 수년이 흘렀지만 여전이 ArcObjects는 GIS 어플리케이션 개발에서 매우 큰 영역을 차지하고 있으며 향후에도 개발자와 GIS 개발 회사에 미치는 영향력은 더 커지거나 지금처럼 계속 유지될 것으로 기대됩니다.
ArcObjects를 이용한 GIS 시스템 개발에 대한 일을 맡으면서 ArcObjects를 활용해야할 일이 생겼습니다. 과거 ArcObjects를 사용하여 개발했던 프로젝트의 경험에 대한 기억이 가물가물해져 버렸습니다. 해서... 그때의 실수가 되풀이 되지 않도록 ArcObjects에 대한 경험을 글로 하나 하나 남겨 놔야 겠다는 생각이 들어 ArcObjects 관련 글을 포스팅하기로 하였습니다.
그 첫번째는 GIS에서 수치지도 교환에 거의 표준으로 활용되고 있는 ESRI의 SHP 파일을 추가하는 방법입니다. 개발언어는 C#를 사용할 것이며 Form 기반의 어플리케이션의 폼에 ArcObjects에서 제공하는 MapControl을 올려 놓습니다. MapControl의 정확한 클래스 타입은 AxMapControl입니다. 그리고 버턴을 하나 올려 놓습니다. 이 버턴 안의 코드는 지정된 폴더에 존재하는 SHP 파일을 MapControl에 추가하는 코드입니다.
SHP 파일 하나를 추가하 위한 절차가 단순하지 않다는 것을 느낄 수 있습니다. 이는 ArcObjects가 매우 다양한 데이터 포맷을 지원하는 이유이며 로컬 데이터 뿐만 아니라 네트워크로부터 데이터를 받을 수 있도록 하기 위함입니다.
중요한 부분만을 짚어 설명한다면 6번 줄의 코드에서 OpenFromFile 매서드의 첫번째 인자 값인 d:/__data__ 라는 폴더를 작업공간으로 지정하겠다는 의미입니다. 즉, 추가하고자 하는 SHP 파일이 존재하는 경로입니다. 두번째 인자는 부모 윈도우의 핸들로써 NULL(0) 값으로 주어도 관계없습니다. 실제 SHP 파일명은 9번째 줄의 OpenFeatureClass 매서드의 인자로 지정하며 주의할 점은 확장자인 .shp를 생략하고 있다는 점입니다.
이런 절차로 생성한 ILayer 타입인 IFeatureLayer를 MapControl의 AddLayer 매서드의 인자로 주게 되어 추가할 수 있습니다. 결과는 아래와 같습니다.
 레이어를 추가하자 마자 MapControl은 추가된 레이어의 전체를 도시하게 됩니다. 이상으로 간단히 SHP 파일을 ArcObjects에서 제공하는 MapControl에 추가하여 도시하는 방법을 살펴보았습니다.
이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*
|
김형준(Dip2K)
2009/09/22 10:57
2009/09/22 10:57
|
|
| Track this back : http://www.gisdeveloper.co.kr/trackback/506 |
|
|
|
|
|
|
|
| 가끔 좌표 데이터와 속성 데이터가 텍스트 파일 형태로 되어 있는 경우가 있습니다. 하나의 예로 서울시의 버스 노선에 대한 데이터인데, 서울시에서 버스 노선에 대한 정보을 엑셀로 저장하여 사용자에게 제공하고 있습니다. 이 엑셀 파일을 쉽게 텍스트 파일로 저장할 수 있으며 다시 이 텍스트 파일을 읽어서 SHP 파일로 변환해 주는 툴입니다. 참고로 서울시 버스 노선에 대한 엑셀 파일은 아래 URL을 통해 다운로드 받을 수 있습니다.
위의 엑셀 파일을 엑셀 프로그램에서 읽어 [다른 이름으로 저장하기]에서 "텍스트 (탭으로 분리)" 형식으로 저장한 파일을 살펴보면 다음과 같습니다.
첫번째 줄에 필드 명 들이 텝문자로 구분되어 나타나고.. 이후의 줄은 각 필드에 대한 값이며 역시 텝으로 분리되어 있습니다. 이 텍스트 파일을 SHP 파일로 만드는 툴의 사용은 아래와 같습니다.
살짝 설명을 하면, Fields에 내보내고자 하는 항목을 체크하고 X, Y 좌표로써 사용할 필드를 지정해 줍니다. 위의 서울시 노선 데이터와 툴을 사용해 만든 SHP 파일을 ArcMap에서 열어 보면 아래 화면과 같습니다.
툴에서 지정한 속성과 좌표가 제대로 표시되는 것을 확인할 수 있습니다. 간단히 TXT 파일을 SHP 파일로 변환할 경우가 있을 때 요긴하게 사용하시길 바라면서 만들어 올려 봅니다. 참고로 이 프로그램은 GIS 오픈소스 라이브러리인 shapelib을 사용해 만들어 었습니다. shapelib의 자세한 사용법은 cafe.naver.com에서 오픈소스 라이브러리 카테고리를 참고하시면 도움을 받으실 수 있습니다.
이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*
|
김형준(Dip2K)
2009/09/20 12:52
2009/09/20 12:52
|
|
| Track this back : http://www.gisdeveloper.co.kr/trackback/505 |
|
|
|
|
|
|
|
| GML (Geography Markup Language) http://www.opengeospatial.org/standards/gml
GML은 지리적 특성을 표현하기 위한 XML 문법입니다. GML은 인터넷에서 지리 데이터 송수신을 위한 개방된 교환 포맷임과 동시에 지리데이터 시스템을 위한 모델링 언어로써 사용됩니다. 문법에 기반한 대부분의 XML과 같이 두 부분으로 나눠져 있습니다.
- 문서의 설명 부분
- 실제 데이터 부분
GML 문서는 GML 스키마를 사용하여 기술됩니다. 이는 사용자와 개발자에게 포인트, 라인 그리고 폴리곤을 포함하는 일반적인 지리데이터셋을 설명할 수 있도록 합니다. 그러나 GML의 개발자들은 GML의 확장을 특화시키는 커뮤니티 지향적인 어플리케이션 스키마를 정의하기 위한 커뮤니티 작업을 상상합니다. 어플리케이션 스키마를 사용하여 사용자는 일반적인 포인트, 라인, 폴리곤을 길, 고속도로 그리고 다리로써 참조할 수 있습니다. 만약 커뮤니티의 모든 사람이 동일한 스키마를 사용하는 것에 대해 동의한다면 데이터를 쉽게 교환할 수 있으며 도로에 대한 라인을 표시할때 도로로 표시할 수 있게 됩니다.
KML(Keyhole Markup Language) http://earth.google.com/intl/ko/userguide/v4/ug_kml.html http://en.wikipedia.org/wiki/Keyhole_Markup_Language
KML은 현재 또는 미래의 웹 기반의 2차원과 3차원 브라우저에서 지리 데이터의 주기와 가시화를 위한 XML 기반의 스키마입니다. KML은 Google 어스, Google 지도 및 기타 응용 프로그램에 표시하기 위해 점, 선, 이미지, 다각형 및 모델과 같은 지형 기능을 모델링하고 저장하기 위한 XML 문법 및 파일 형식입니다. KML을 사용하여 Google 어스 및 Google 지도의 다른 사용자와 장소 및 정보를 공유할 수 있습니다. KML은 구글어스에서 사용하기 위해 개발되어졌으며 원래 이름은 Keyhole Earth Viewer였습니다. Keyhole 사에서 만들어졌으며 이 회사는 2004년에 구글로 인수되었습니다. 현재 KML은 오픈 GIS 컨소시엄의 국제 표준입니다. KML을 표현하고 편집할 수 있는 첫번째 프로그램은 구글어스이며 KML을 지원하는 툴이 다양하게 제공되고 있습니다.
참고 : KMZ 파일은 KML 파일의 압축된 버전입니다.
WMS(Web Map Service) http://en.wikipedia.org/wiki/Web_Map_Service
WMS는 GIS 데이터베이스의 데이터를 사용하는 지도 서버로부터 생성되어진 지오레퍼런싱된 지도 이미지를 서비스하기 위한 표준 프로토콜입니다. 스펙은 1999년에 오픈 GIS 컨소시엄에서 처음 개발어 공개되었습니다.
WMS는 다양한 요청 타입을 가지고 있으며 WMS 서버는 다음 2가지 요청 타입을 제공해야 합니다.
- GetCapabilities : WMS에 대한 인자값과 이용가능한 지도 레이어 목록 반환
- GetMap : 해당 인자에 대한 지도 이미지
다음은 WMS 서버에서 옵션으로 제공하는 요청 타입입니다.
- GetFeatureInfo
- DescribeLayer
- GetLegendGraphic
WMS는 클라이언트가 인터넷으로부터 접근할 수 있는 지도와 GIS 데이터 포맷을 폭넓게 지원합니다. WMS를 지원하는 주요 상업적인 GIS 및 맵핑 소프트웨어는 다음과 같습니다.
- Bentley Systems's GIS products
- ESRI's ArcGIS products
- MapInfo Professional
- GeoMedia
- Manifold System
- Google Earth
또한 WMS를 지원하는 오픈소스 제품군은 다음과 같습니다.
- Quantum GIS
- uDig
- OpenJUMP
- MapGuide Open Source
- NASA World Wind
- GRASS GIS
- gvSIG
- OpenLayers
WFS(Web Feature Service) http://en.wikipedia.org/wiki/Web_Feature_Service
WFS는 플랫폼에 독립적인 호출을 이용하여 웹에서 지리데이터에 대한 피쳐(feature)를 요청할 수 있는 인터페이스를 제공합니다. WMS가 단순히 지도 이미지만을 서비스하는데 반해 WFS는 공간 분석 등과 같은 연산을 위해 필요한 데이터를 서비스 합니다.
WFS의 서비스 기능은 다음과 같습니다.
- 공간 또는 비공간 조건에 기반한 피쳐(feature)의 쿼리
- 새로운 피쳐 생성
- 피쳐 삭제
- 피쳐 업데이트
가장 기본적인 WFS 서버는 반드시 공간 또는 비공간 조건에 기반한 피쳐의 쿼리 기능을 지원해야 하며, 트랜젝션 WFS(WFS-T)는 피쳐의 생성과 삭제 그리고 업데이트를 제공합니다.
이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*
|
김형준(Dip2K)
2009/09/16 15:56
2009/09/16 15:56
|
|
| Track this back : http://www.gisdeveloper.co.kr/trackback/504 |
|
|
|
|
|
|
|
폴리곤 SHP를 KML로 변환하는 툴을 요청하는 분이 계셔서 바로 만들어 올립니다. 원래 오늘 정도 만들어 올리려고 했는데... 먼저 필요한 분이 있어서 기쁜 마음에 올려봅니다.
폴리곤 타입의 SHP를 지정하고... 높이 값에 대한 필드를 지정하여 건물과 같은 Feature를 입체감있게 표현할 수 있도록 하였습니다. 높이 값에 어떤 수를 곱할 수 있도록 값을 지정할 수 있도록 하였으니 참고하시구요. 만약 높이값에 대한 필드가 딱히... 없다면 일정한 높이 값을 지정할 수도 있게 하였습니다. 아래는 건물 SHP을 KML로 내보내어 구글어스에서 본 화면입니다. 참고로 SHP 파일의 좌표계는 WGS84 경위도 좌표계를 가지고 있어야 구글어스에서 옳바른 위치가 적용됩니다.
포인트나 폴리라인을 kml로 변환하는 다른 툴보다 상대적으로 사용법이 다소 복잡한데... 이해가 않되시거나 실행이 않되는 분들은 언제든 댓글을 통해 질문 남겨주시기 바랍니다.
이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*
|
김형준(Dip2K)
2009/09/08 14:07
2009/09/08 14:07
|
|
| Track this back : http://www.gisdeveloper.co.kr/trackback/502 |
|
|
|
|
|
|
|
| 폴리라인 타입의 SHP 파일을 KML로 변환할 수 있는 툴입니다. 요즘 부쩍 KML에 대해 관심이 높습니다. OGC에서 표준으로 채택된 포맷인지라.... 활용도도 매우 높을거란 판단에서 인듯 합니다. 잠시 시간을 내어 만들어 보았습니다. 아래는 툴의 실행화면인데.... 사용법은 매우 간단합니다. 폴리라인 타입의 SHP 파일과 저장할 KML 파일 이름을 지정해 주면됩니다.
만약 폴리라인 타입이 아닌 폴리곤 SHP을 지정했을 경우에도 폴리곤이 아닌 폴리라인으로 내보내집니다. 하지만 포인트의 경우 그 결과가 어떻게 될지 모르겠습니다. 좌표계는 구글어스에서 사용하는 WGS84 경위도 좌표계로 저장된 SHP 파일일 경우에 제대로 구글어스에서 중첩됩니다. 아래는 위의 툴로 내보낸 SHP 파일을 구글어스에서 함께 표현한 화면입니다.
혹... 필요로 하시는 분들에게 도움이 되셨으면 좋겠습니다.
이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*
|
김형준(Dip2K)
2009/09/07 13:00
2009/09/07 13:00
|
|
| Track this back : http://www.gisdeveloper.co.kr/trackback/501 |
|
|
|
|
|
|
|
포인트, 폴리라인, 폴리곤에 대한 SHP를 KML 포맷으로 변환할 수 있는 유틸리티입니다. 선택 기능으로써 SHP의 속성값을 라벨로 표시할 수 있는 기능도 제공됩니다. SHP 파일의 좌표계는 WGS84 경위도 좌표계여야 합니다.
위의 프로그램으로 SHP 파일을 KML로 내보내 구글어스에서 살펴본 화면은 아래와 같습니다. 처음 화면은 기본 화면이며 두번째 화면이 변환된 KML과 함께 표현한 것입니다.
참고로... 이 툴은 오픈소스인 ShapeLib를 이용해 SHP 파일의 도형 정보와 속성 정보를 읽어 만들었습니다. ShapeLib는 http://cafe.naver.com/gisdev에서 자세한 사용법을 알 수 있으니 SHP 파일을 처리할 필요가 있으신 분은 한번 참조해 보시기 바랍니다.
참고로... 이 프로그램을 만들면서 찾은 정보입니다. 먼저 Visual C++ 2005 이상에서 MFC 대화창 기반의 어플리케이션 개발 시에 XP 테마를 적용하기 위해서는 다음 코드를 임의의 헤더 파일이나 소스 파일에 포함해야 합니다.
그리고 KML 파일의 내용은 utf-8로 인코딩되어야 하며 C/C++에서 ansi 문자셋를 utf-8 문자셋으로 변환하기 위해 사용한 코드는 아래와 같습니다.
첫번째 인자는 출력할 파일의 핸들이며 두번째는 널문자로 끝나는 ansi 문자 배열을 넘겨주게 되면 utf-8로 변환되어 저장됩니다. 위의 코드의 출처는 http://skorea.tistory.com/43 입니다.
이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*
|
김형준(Dip2K)
2009/09/06 21:32
2009/09/06 21:32
|
|
| Track this back : http://www.gisdeveloper.co.kr/trackback/500 |
|
|
|
|
|
|
|
| XML 데이터를 쓰고 읽기 위해서 인터넷을 검색하던 차에 속도를 강점으로 내세우면서 STL 만을 사용하여 플랫폼 이식에도 뛰어난 오픈소스를 찾았는데요. 바로 CMarkup 입니다. 다운로드 사이트는 http://www.firstobject.com/ 이구요. 사용해 보니 XML의 charset도 지원하여 더욱 믿음이 가는 오픈소스였습니다. XML을 처리할 일이 있다면 한번 사용해 보시기 바랍니다.
추후 이 오픈소스를 다시 사용할 때를 대비하여 사용 방법을 정리해 정리차원에서 올려봅니다.
컴파일 시 주의할 사항은... CMarkup은 MFC의 CString와 STL의 string에 대한 문자열 타입을 사용하며 기본적으로 CString을 사용합니다. 플랫폼에 독립적인 구성을 위해서 STL을 사용하는것이 좋기 때문에 전처리에서 MARKUP_STL를 정의해줘야 합니다. 이 전처리 정의는 프로젝트의 속성 페이지에서 해줌으로써 전역적으로 적용되도록 해야 합니다. 아래의 코드는 XML을 쓰는 예제 코드입니다. 윈도우즈 계열의 개발툴인 VS2008로 작성했습니다.
결과는 다음과 같습니다.
AddElement를 통해 엘리먼트를 만들고, 해당 엘리먼트의 자식을 추가하기 위해 AddChildElem을 사용하거나 먼저 IntoElem을 호출한 후 다시 AddElement를 사용합니다.
이제 반대로 위와 같은 XML 데이터를 읽어 보도록 하겠습니다. 먼저 위의 결과를 파일로 저장해 놓고 그 파일을 읽어 데이터를 추출하는 예제를 들어 보겠습니다. 예를 들어... 아이템(ITEM)의 이름(NAME)과 수량(QTY)을 읽어 보도록 하겠습니다. 위의 XML 문자열의 경우 아이템의 개수는 총2개이므로 2개가 검색될 것입니다. 다음이 이 예제와 부합되는 코드입니다.
먼저 XML 데이터를 가지고 있는 파일을 Load 매서드를 이용해 읽습니다. 다시 반복문을 사용하여 루트 엘리먼트의 자식 ITEM 엘리먼트를 검색하기 위해 FindChildElem을 사용합니다. 그러면 해당되는 자식 엘리먼트가 추출됩니다. 해당되는 자식 엘리먼트의 자식 엘리먼트를 읽기 위해 IntoElem() 함수를 사용한 뒤에 원하는 엘리먼트(NAME, QTY)를 검색하기 위해 FindChildElem을 호출하고 실제로 값을 읽기 위해서 GetChildData 매서드를 호출합니다. 다 읽은 후 OutOfElem()을 호출합니다. 결과는 아래와 같습니다.
이 글이 도움이 되셨다면, 짧은 댓글이라도 달아주시길, 큰 힘이 됩니다. ^^*
|
김형준(Dip2K)
2009/09/03 19:36
2009/09/03 19:36
|
|
| Track this back : http://www.gisdeveloper.co.kr/trackback/499 |
|
|
|
|
Total : 593717
Today : 56
Yesterday : 464 |
|
|
|