기존의 대부분 GIS 파이프라인은 공간 데이터베이스, 타일 서버, 렌더링 엔진, 웹 프런트엔드 등으로 구성되어 Google Maps와 같은 대규모 서비스에는 적합하지만, 보고서용 PNG 지도, PDF, 정적 웹사이트, Rails 앱, 데이터 시각화 또는 매일 생성되는 지도와 같은 단순한 목적에는 과도합니다. Ruby에는 이러한 작업을 기본적으로 수행할 방법이 없었기에 저자는 직접 솔루션을 개발했습니다.
GIS 렌더링 파이프라인
핵심적으로 GIS 렌더러는 GeoJSON → Projection → Raster → PNG의 간단한 파이프라인을 따릅니다. libgd-gis는 이 파이프라인을 정확하게 구현합니다.
-
GeoJSON(도로, 경계, 강, 공원 등) 데이터 로드
-
위도/경도를 메르카토르 좌표로 투영
-
투영된 좌표를 픽셀로 변환
-
GD를 사용하여 그리기
이 모든 과정은 Node, PostGIS, QGIS, Mapbox와 같은 외부 스택 없이 순수 Ruby 내에서 이루어집니다.
최소한의 예시 코드
간단한 예시는 다음과 같습니다:
ruby
require "gd/gis"
TOKYO = [139.68, 35.63, 139.82, 35.75]
map = GD::GIS::Map.new(
bbox: TOKYO,
zoom: 13,
basemap: :esri_satellite
)
map.add_geojson(
"railways.geojson",
color: [255, 80, 80]
)
map.add_geojson(
"parks.geojson",
color: [80, 200, 120, 120]
)
map.render("tokyo.png")
이 코드만으로 투영 계산, 클리핑, 스케일링, 래스터화, 알파 블렌딩 등 모든 과정이 GD 내에서 처리됩니다.
각 도시 렌더링이 입증하는 것
각 도시 렌더링은 엔진의 특정 측면을 검증합니다:
-
파리: 방사형 및 불규칙한 형태를 통해 폴리곤 처리, 조인, 클리핑의 정확성 입증.
-
도쿄: 극도로 밀집된 곡선, 철도, 강을 통해 투영 및 위성 이미지와의 정렬 정확성 입증.
-
파라나(아르헨티나): 실제 OpenStreetMap 데이터를 사용하여 파이프라인이 실제 도시 데이터에 작동함을 입증.
-
뉴욕: 수만 개의 선분으로 구성된 성능 스트레스 테스트를 통해 대도시 규모 데이터셋 처리 능력 입증.