D bu gisti düzenledi . Düzenlemeye git
1 file changed, 15 insertions, 27 deletions
\354\210\230 \353\247\216\354\235\200 geojson\354\235\204 postgresql \355\205\214\354\235\264\353\270\224\353\241\234 \353\260\200\354\226\264\353\204\243\352\270\260.md"
| @@ -1,6 +1,6 @@ | |||
| 1 | 1 | # GeoJSON 파일 병합 및 QGIS DB 연동 가이드 | |
| 2 | 2 | ||
| 3 | - | 이 문서는 **여러 개의 작은 GeoJSON 파일을 하나의 파일로 병합**하고, **QGIS를 이용하여 데이터베이스(PostGIS 등)에 효율적으로 연동**하는 절차를 안내합니다. | |
| 3 | + | 이 문서는 **여러 개의 작은 GeoJSON 파일을 하나로 병합**하고, **QGIS를 이용하여 데이터베이스(PostGIS 등)에 효율적으로 연동**하는 절차를 안내합니다. | |
| 4 | 4 | ||
| 5 | 5 | --- | |
| 6 | 6 | ||
| @@ -17,7 +17,7 @@ | |||
| 17 | 17 | ||
| 18 | 18 | * **ogr2ogr 대신 파이썬 스크립트**를 이용하여 여러 GeoJSON 파일을 안정적으로 병합 | |
| 19 | 19 | * Feature 타입과 FeatureCollection 타입 모두 지원 | |
| 20 | - | * 병합된 파일을 QGIS로 불러와 **PostGIS 등 데이터베이스에 직접 업로드** | |
| 20 | + | * 병합된 파일을 QGIS에서 불러와 **PostGIS 등 데이터베이스에 직접 업로드** | |
| 21 | 21 | ||
| 22 | 22 | --- | |
| 23 | 23 | ||
| @@ -90,33 +90,21 @@ merge_geojson_files(input_directory, output_filename) | |||
| 90 | 90 | ||
| 91 | 91 | ## 2. QGIS를 이용한 데이터베이스 연동 | |
| 92 | 92 | ||
| 93 | - | 1. **QGIS 실행 및 레이어 불러오기** | |
| 94 | - | ||
| 95 | - | * QGIS 실행 → `레이어 > 레이어 추가 > 벡터 레이어 추가` | |
| 96 | - | * `merged.geojson` 파일 선택하여 불러오기 | |
| 97 | - | ||
| 93 | + | 1. **QGIS 실행** | |
| 98 | 94 | 2. **데이터베이스 연결** | |
| 99 | 95 | ||
| 100 | - | * QGIS 메뉴 → `데이터베이스` → PostgreSQL/PostGIS 연결 설정 | |
| 101 | - | ||
| 102 | - | 3. **데이터 내보내기** | |
| 103 | - | ||
| 104 | - | * `merged.geojson` 레이어에서 **마우스 오른쪽 클릭 → 내보내기 → 객체를 다른 이름으로 저장** | |
| 105 | - | ||
| 106 | - | 4. **내보내기 설정** | |
| 96 | + | * 메뉴: `데이터베이스 > DB 관리자` | |
| 97 | + | * PostgreSQL/PostGIS 연결 정보 입력 후 접속 | |
| 98 | + | 3. **레이어/파일 불러오기** | |
| 107 | 99 | ||
| 108 | - | * **형식**: `PostgreSQL` (데이터베이스 직접 연동 시) | |
| 109 | - | * **파일 이름**: 데이터베이스 테이블명 | |
| 110 | - | * **좌표계**: 필요 시 `EPSG:4326 (WGS 84)` | |
| 111 | - | * **업로드 옵션**: 활성화 | |
| 112 | - | ||
| 113 | - | 5. **실행** | |
| 114 | - | ||
| 115 | - | * 확인 클릭 → QGIS가 GeoJSON 데이터를 데이터베이스 테이블로 생성 및 삽입 | |
| 116 | - | ||
| 117 | - | --- | |
| 100 | + | * DB 관리자 창에서 **`레이어/파일 불러오기`** 버튼 클릭 | |
| 101 | + | * **백터 레이어 가져오기** 창이 뜸 | |
| 102 | + | 4. **백터 레이어 가져오기 설정** | |
| 118 | 103 | ||
| 119 | - | ## 최종 결과 | |
| 104 | + | * **입력**: `merged.geojson` 파일 선택 | |
| 105 | + | * **스키마**: 대상 DB 스키마 선택 (예: `public`) | |
| 106 | + | * **테이블**: 생성할 테이블명 입력 | |
| 107 | + | * 좌표계 필요 시 지정 (`EPSG:4326` 등) | |
| 108 | + | 5. **확인 클릭** | |
| 120 | 109 | ||
| 121 | - | * 여러 GeoJSON 파일이 **하나의 통합 테이블**로 데이터베이스에 저장 | |
| 122 | - | * QGIS 또는 다른 GIS 소프트웨어에서 테이블을 직접 불러와 활용 가능 | |
| 110 | + | * QGIS가 GeoJSON 데이터를 읽어 DB에 테이블 생성 후 데이터 삽입 | |
D bu gisti düzenledi . Düzenlemeye git
1 file changed, 122 insertions
\354\210\230 \353\247\216\354\235\200 geojson\354\235\204 postgresql \355\205\214\354\235\264\353\270\224\353\241\234 \353\260\200\354\226\264\353\204\243\352\270\260.md" (dosya oluşturuldu)
| @@ -0,0 +1,122 @@ | |||
| 1 | + | # GeoJSON 파일 병합 및 QGIS DB 연동 가이드 | |
| 2 | + | ||
| 3 | + | 이 문서는 **여러 개의 작은 GeoJSON 파일을 하나의 파일로 병합**하고, **QGIS를 이용하여 데이터베이스(PostGIS 등)에 효율적으로 연동**하는 절차를 안내합니다. | |
| 4 | + | ||
| 5 | + | --- | |
| 6 | + | ||
| 7 | + | ## 기존 방식의 문제점 | |
| 8 | + | ||
| 9 | + | | 도구 | 애로사항 | | |
| 10 | + | | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | | |
| 11 | + | | **ogr2ogr** | 스크립트 실행 중단 (서버 에러): ogr2ogr를 이용한 스크립트가 예상치 못한 이유로 중단되거나, GeoJSON 파일의 구조적 문제로 인해 오류가 발생하여 전체 작업이 멈추는 경우가 있었습니다. 특히 파일 수가 많을수록 불안정성이 커져 효율적인 자동화가 어려웠습니다. | | |
| 12 | + | | **QGIS** | 단건 처리의 한계: QGIS의 기본 레이어 추가 기능은 개별 파일을 수동으로 불러오는 방식이라 수십, 수백 개의 파일을 처리하기에 비효율적입니다. 일괄 처리 기능이 있지만, 종종 복잡한 설정이나 예상치 못한 문제로 인해 쾌적하게 작동하지 않는 경우가 있습니다. | | |
| 13 | + | ||
| 14 | + | --- | |
| 15 | + | ||
| 16 | + | ## 개선 방안 | |
| 17 | + | ||
| 18 | + | * **ogr2ogr 대신 파이썬 스크립트**를 이용하여 여러 GeoJSON 파일을 안정적으로 병합 | |
| 19 | + | * Feature 타입과 FeatureCollection 타입 모두 지원 | |
| 20 | + | * 병합된 파일을 QGIS로 불러와 **PostGIS 등 데이터베이스에 직접 업로드** | |
| 21 | + | ||
| 22 | + | --- | |
| 23 | + | ||
| 24 | + | ## 1. 파이썬을 이용한 GeoJSON 파일 병합 | |
| 25 | + | ||
| 26 | + | 아래 파이썬 스크립트를 `merge.py`로 저장 후, **GeoJSON 파일들이 있는 동일 디렉터리**에서 실행합니다. | |
| 27 | + | ||
| 28 | + | ### 파일 구조 예시 | |
| 29 | + | ||
| 30 | + | ``` | |
| 31 | + | . | |
| 32 | + | ├── merge.py | |
| 33 | + | ├── wrnArea.L1010000.geojson | |
| 34 | + | ├── wrnArea.L1010200.geojson | |
| 35 | + | ├── wrnArea.L1010300.geojson | |
| 36 | + | └── ... | |
| 37 | + | ``` | |
| 38 | + | ||
| 39 | + | ### `merge.py` 코드 | |
| 40 | + | ||
| 41 | + | ```python | |
| 42 | + | import os | |
| 43 | + | import glob | |
| 44 | + | import json | |
| 45 | + | ||
| 46 | + | def merge_geojson_files(input_folder, output_file): | |
| 47 | + | merged_features = [] | |
| 48 | + | ||
| 49 | + | # [수정 필요] 파일명 패턴 변경 가능 | |
| 50 | + | file_list = glob.glob(os.path.join(input_folder, 'wrnArea*.geojson')) | |
| 51 | + | ||
| 52 | + | if not file_list: | |
| 53 | + | print(f"오류: '{input_folder}' 폴더에서 GeoJSON 파일이 발견되지 않았습니다.") | |
| 54 | + | return | |
| 55 | + | ||
| 56 | + | print(f"병합할 GeoJSON 파일 {len(file_list)}개를 찾았습니다.") | |
| 57 | + | ||
| 58 | + | for file_path in file_list: | |
| 59 | + | try: | |
| 60 | + | with open(file_path, 'r', encoding='utf-8') as f: | |
| 61 | + | data = json.load(f) | |
| 62 | + | file_type = data.get('type') | |
| 63 | + | if file_type == 'FeatureCollection': | |
| 64 | + | merged_features.extend(data.get('features', [])) | |
| 65 | + | elif file_type == 'Feature': | |
| 66 | + | merged_features.append(data) | |
| 67 | + | else: | |
| 68 | + | print(f"경고: '{os.path.basename(file_path)}' 지원되지 않는 유형({file_type}) → 건너뜀") | |
| 69 | + | except json.JSONDecodeError as e: | |
| 70 | + | print(f"오류: '{os.path.basename(file_path)}' JSON 형식 오류: {e}") | |
| 71 | + | ||
| 72 | + | merged_geojson = { | |
| 73 | + | 'type': 'FeatureCollection', | |
| 74 | + | 'features': merged_features | |
| 75 | + | } | |
| 76 | + | ||
| 77 | + | try: | |
| 78 | + | with open(output_file, 'w', encoding='utf-8') as f: | |
| 79 | + | json.dump(merged_geojson, f, indent=2, ensure_ascii=False) | |
| 80 | + | print(f"\n성공적으로 {len(merged_features)}개의 피처를 '{output_file}'에 병합했습니다.") | |
| 81 | + | except IOError as e: | |
| 82 | + | print(f"오류: 출력 파일 '{output_file}' 저장 실패: {e}") | |
| 83 | + | ||
| 84 | + | input_directory = '.' | |
| 85 | + | output_filename = 'merged.geojson' | |
| 86 | + | merge_geojson_files(input_directory, output_filename) | |
| 87 | + | ``` | |
| 88 | + | ||
| 89 | + | --- | |
| 90 | + | ||
| 91 | + | ## 2. QGIS를 이용한 데이터베이스 연동 | |
| 92 | + | ||
| 93 | + | 1. **QGIS 실행 및 레이어 불러오기** | |
| 94 | + | ||
| 95 | + | * QGIS 실행 → `레이어 > 레이어 추가 > 벡터 레이어 추가` | |
| 96 | + | * `merged.geojson` 파일 선택하여 불러오기 | |
| 97 | + | ||
| 98 | + | 2. **데이터베이스 연결** | |
| 99 | + | ||
| 100 | + | * QGIS 메뉴 → `데이터베이스` → PostgreSQL/PostGIS 연결 설정 | |
| 101 | + | ||
| 102 | + | 3. **데이터 내보내기** | |
| 103 | + | ||
| 104 | + | * `merged.geojson` 레이어에서 **마우스 오른쪽 클릭 → 내보내기 → 객체를 다른 이름으로 저장** | |
| 105 | + | ||
| 106 | + | 4. **내보내기 설정** | |
| 107 | + | ||
| 108 | + | * **형식**: `PostgreSQL` (데이터베이스 직접 연동 시) | |
| 109 | + | * **파일 이름**: 데이터베이스 테이블명 | |
| 110 | + | * **좌표계**: 필요 시 `EPSG:4326 (WGS 84)` | |
| 111 | + | * **업로드 옵션**: 활성화 | |
| 112 | + | ||
| 113 | + | 5. **실행** | |
| 114 | + | ||
| 115 | + | * 확인 클릭 → QGIS가 GeoJSON 데이터를 데이터베이스 테이블로 생성 및 삽입 | |
| 116 | + | ||
| 117 | + | --- | |
| 118 | + | ||
| 119 | + | ## 최종 결과 | |
| 120 | + | ||
| 121 | + | * 여러 GeoJSON 파일이 **하나의 통합 테이블**로 데이터베이스에 저장 | |
| 122 | + | * QGIS 또는 다른 GIS 소프트웨어에서 테이블을 직접 불러와 활용 가능 | |