이현준 블로그

  1. geometry vs geography — 두바이가 1,727km 멀어졌다 포스트 대표 이미지

    geometry vs geography — 두바이가 1,727km 멀어졌다

    지난 편이 남긴 규칙은 "재기 전에 미터 좌표계로 옮긴다"였다. 시키는 대로 서울과 두바이를 EPSG:5179로 옮겨 쟀더니 8,523.5km가 나왔다. 실제 거리는 6,795.7km다. 에러도 경고도 없었다. 같은 자가 서울 안에서는 3.3m밖에 안 틀리는데, 그 3.3m마저 오차가 아니라 5179에 적혀 있던 축척계수 0.9996이었다. geometry와 geography가 무엇이 다른지를 바이트 단위로, 함수 242개 대 31개로, 그리고 서울–LA 중간점 두 개가 1만 km 떨어지는 것으로 실측했다.

    31
    • GIS
  2. ST_Buffer와 공간 분석 — 500m 버퍼가 397m로 줄어든다 포스트 대표 이미지

    ST_Buffer와 공간 분석 — 500m 버퍼가 397m로 줄어든다

    서울 소방서 반경 500m 안의 건물을 세었더니 23,695개. 좌표계 한 줄을 바꾸자 36,607개가 됐다. osm2pgsql이 붙여준 EPSG:3857에서 500은 미터가 아니라 397m였고, ST_Buffer가 그린 원은 실은 모서리 32개짜리 다각형이라 499.93m 거리의 유치원 하나를 놓쳤다. 소방서 커버리지라는 과제 하나를 끝까지 풀면서 ST_Buffer·ST_Union·ST_Intersection·ST_Centroid·ST_Area를 전부 실측했다.

    23
    • GIS
  3. DE-9IM — 헷갈리는 공간 관계 함수 열 개가 실은 문자열 하나다 포스트 대표 이미지

    DE-9IM — 헷갈리는 공간 관계 함수 열 개가 실은 문자열 하나다

    서울 25개 구 중 인접한 쌍은 35개인가 56개인가. ST_Touches·ST_Intersects·ST_Overlaps가 서로 다른 답을 내놓는데 셋 다 맞다. 종로구와 중구의 경계선에서 뽑은 점은 ST_Contains로 세면 어느 구에도 속하지 않고, ST_Covers로 세면 양쪽에 속한다. 함수 열 개가 실은 아홉 글자짜리 문자열 하나라는 것을 전부 실측으로 확인했다.

    21
    • GIS
  4. osm2pgsql로 OSM 데이터 넣기 — 테이블 구조는 도구가 정한다 포스트 대표 이미지

    osm2pgsql로 OSM 데이터 넣기 — 테이블 구조는 도구가 정한다

    Shapefile은 251행이 251행으로 들어갔다. OSM은 노드 300만을 넣으면 전혀 다른 네 테이블이 나온다. SRID도 칼럼 이름도 내가 정하지 않았고, 태그 1,801종 중 69개만 칼럼이 된다. 기본 출력이 무엇을 대신 결정하는지 재보고, flex로 그 결정권을 되찾는다.

    15
    • GIS
  5. Shapefile을 PostGIS에 넣기 — 글자가 깨지고 좌표가 어긋난다 포스트 대표 이미지

    Shapefile을 PostGIS에 넣기 — 글자가 깨지고 좌표가 어긋난다

    한국 시군구 Shapefile을 PostGIS에 넣으면 서귀포시가 ¼­±ÍÆ÷½Ã가 된다. 게다가 파일은 자기 좌표계가 무엇인지 알려주지 않는다. shp2pgsql과 ogr2ogr로 251개 시군구를 넣으며 인코딩·SRID·측지계 세 함정을 실측으로 통과한다. 잘못 지정하면 317m 어긋난다.

    16
    • GIS
  6. .osm.pbf와 osmium — 한국 전체 지도가 파일 하나에 포스트 대표 이미지

    .osm.pbf와 osmium — 한국 전체 지도가 파일 하나에

    전국 도로·건물·상점이 전부 담긴 파일이 271MB다. 같은 데이터를 XML로 풀면 19.5배로 부푼다. Protocol Buffer·StringTable·delta encoding 세 겹이 어떻게 겹쳐 있는지 파이썬 표준 라이브러리만으로 직접 뜯어보고, osmium으로 서울만 잘라내 손에 쥔다.

    14
    • GIS
  7. PostGIS 시작하기 — CREATE EXTENSION 한 줄이 바꾸는 것 포스트 대표 이미지

    PostGIS 시작하기 — CREATE EXTENSION 한 줄이 바꾸는 것

    평범한 PostgreSQL에 한 줄을 실행하면 함수 776개와 타입 12개가 0.37초 만에 생긴다. 그 한 줄 전후를 카탈로그로 직접 재보고, geometry 타입이 실제로는 어떤 25바이트인지 뜯어본다. Docker 한 줄로 띄우는 것부터 첫 공간 쿼리의 단위 함정까지.

    16
    • GIS
  8. OpenStreetMap 데이터 모델 — 폴리곤이라는 타입이 없다 포스트 대표 이미지

    OpenStreetMap 데이터 모델 — 폴리곤이라는 타입이 없다

    GeoJSON에도 Shapefile에도 있는 Polygon이, 정작 세상에서 가장 큰 지도 데이터베이스에는 없다. OSM은 지구 전체를 Node·Way·Relation 딱 셋으로 그린다. 서울 편의점 7,100개를 직접 세어 보니 6,986개는 점이고 114개는 면이었다. 이 "부족한" 모델이 왜 20년을 버텼는지 파헤친다.

    21
    • GIS