파리, 도쿄, 뉴욕 등을 렌더링하는 순수 Ruby GIS 엔진 구축기

Ruby Can Draw Cities Now

작성자
발행일
2026년 01월 09일

핵심 요약

  • 1 순수 Ruby로 GIS 엔진을 구축하여 QGIS, PostGIS 등 외부 GIS 스택 없이 실제 도시를 렌더링하는 데 성공했습니다.
  • 2 GD 그래픽 엔진 바인딩인 ruby-libgd와 그 위에 구축된 GIS 렌더링 파이프라인 libgd-gis를 활용하여 GeoJSON 데이터를 PNG로 변환합니다.
  • 3 이로써 Rails 애플리케이션, 보고서, 데이터 시각화 등 다양한 시나리오에서 스크립팅 가능한 GIS 렌더링이 가능해졌습니다.

도입

대부분의 사람들은 지도, GIS 또는 시각 컴퓨팅을 생각할 때 Ruby를 떠올리지 않습니다. 일반적으로 QGIS, PostGIS, Mapnik, Mapbox 또는 복잡한 JavaScript 파이프라인과 같은 표준 스택을 사용합니다. 그러나 이 글의 저자는 외부 GIS 스택 없이 Ruby만으로 실제 지리 공간 데이터를 사용하여 도시를 그릴 수 있는지에 대한 의문을 가졌고, 이를 직접 시도하여 성공적인 결과를 얻었습니다. 이 글은 순수 Ruby로 구축된 GIS 엔진의 작동 방식과 그 중요성을 설명합니다.

기존의 대부분 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 데이터를 사용하여 파이프라인이 실제 도시 데이터에 작동함을 입증.

  • 뉴욕: 수만 개의 선분으로 구성된 성능 스트레스 테스트를 통해 대도시 규모 데이터셋 처리 능력 입증.

결론

이 프로젝트는 Ruby에 스크립팅 가능한 GIS 렌더링이라는 새로운 가능성을 열었습니다. 이제 개발자들은 Rails에서 지도를 생성하고, PDF로 내보내거나, 보고서에 사용하고, CI 환경에서 렌더링하며, 정적 GIS 사이트를 구축하고, 지도 생성을 자동화할 수 있게 되었습니다. 이는 데이터 과학, 시민 기술, 도시 계획, 저널리즘, 물류, 연구 분야에 큰 영향을 미칠 것입니다. 저자는 처음부터 GIS 엔진을 만들 계획은 없었지만, Ruby의 한계를 시험하며 도시를 그릴 수 있는 수준까지 발전시켰고, 이는 앞으로 많은 문을 열어줄 것이라고 강조합니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!