2단계 · GDAL 레시피

전처리

무결성 확인, 좌표계·인코딩·범위·속성 정리.

  1. 1무결성 확인GDAL/OGR C++, MIT, v3.13.3공간데이터 변환 표준 엔진. 래스터(GDAL)·벡터(OGR) 수백 가지 포맷.자세히 보기

    ogrinfo -q -sql "SELECT COUNT(*) AS total, COUNT(hgt_median_m) AS has_height FROM sf_buildings" /raw/sf_buildings.geojson

    전체 건물 수 vs 높이(hgt_median_m) 있는 건물 수. Socrata API: 숫자도 문자열로 응답.

  2. 2높이 숫자 변환·빈 높이 채우기GDAL/OGR C++, MIT, v3.13.3공간데이터 변환 표준 엔진. 래스터(GDAL)·벡터(OGR) 수백 가지 포맷.자세히 보기

    ogr2ogr -f GeoJSON /work/buildings_raw.geojson /raw/sf_buildings.geojson -makevalid -explodecollections -dialect SQLite -sql "SELECT geometry, mblr AS name, ROUND(COALESCE(CAST(hgt_median_m AS REAL), 9.0), 1) AS height, CASE WHEN hgt_median_m IS NOT NULL THEN '실측 높이(지붕 중앙값)' ELSE '기본값 9m' END AS height_source FROM sf_buildings WHERE COALESCE(CAST(hgt_median_m AS REAL), 9.0) >= 1 AND ST_Area(geometry) > 1e-10"

    CAST: 문자열 높이 → 숫자, 빈 값은 9m. height_source: 사용 값 출처. -explodecollections: MultiPolygon → 다각형 단위(mago 3DTiler가 MultiPolygon 건너뜀). WHERE: 높이 1m 미만·면적 1㎡ 미만 조각 제외(납작한 벽 → mago 중단).

  3. 3작은 구멍 메우기Python 스크립트 Python, PSF, v3.11도구가 못 하는 작은 손질용 직접 작성 스크립트.자세히 보기

    python /scripts/fill_holes.py /work/buildings_raw.geojson /work/buildings.geojson 10

    수 ㎡ 구멍(채광창 등) → mago 3DTiler 벽 생성 실패·전체 중단. 10㎡ 미만 구멍만 메움, 큰 안뜰은 유지.